{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "qpath = r'../../' # path to quetzal here\n",
    "data = r'inputs/'\n",
    "import sys\n",
    "sys.path.append(qpath)\n",
    "\n",
    "# import class\n",
    "from quetzal.io.gtfs_reader import importer"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Read GTFS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>indicator</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>agencies</td>\n",
       "      <td>[Bilbobus]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>running_services</td>\n",
       "      <td>[1]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>timezone</td>\n",
       "      <td>Europe/Madrid</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>start_date</td>\n",
       "      <td>20191210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>end_date</td>\n",
       "      <td>20200310</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>num_routes</td>\n",
       "      <td>82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>num_trips</td>\n",
       "      <td>3297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>num_stops</td>\n",
       "      <td>498</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>num_shapes</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>num_frequencies</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          indicator          value\n",
       "0          agencies     [Bilbobus]\n",
       "1  running_services            [1]\n",
       "2          timezone  Europe/Madrid\n",
       "3        start_date       20191210\n",
       "4          end_date       20200310\n",
       "5        num_routes             82\n",
       "6         num_trips           3297\n",
       "7         num_stops            498\n",
       "8        num_shapes              0\n",
       "9   num_frequencies              0"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feed = importer.GtfsImporter(path=data + r'bilbao.zip', dist_units='m')\n",
    "feed = feed.clean()\n",
    "feed.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Frequency conversion currently work only for one specific service and date, and on one given time period.  \n",
    "It computes the average headway over this time period."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Restrict to one date and merge services"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "feed = feed.restrict(dates=['20191210'])\n",
    "feed.group_services()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>indicator</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>agencies</td>\n",
       "      <td>[Bilbobus]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>running_services</td>\n",
       "      <td>[1]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>timezone</td>\n",
       "      <td>Europe/Madrid</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>start_date</td>\n",
       "      <td>20191210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>end_date</td>\n",
       "      <td>20191210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>num_routes</td>\n",
       "      <td>82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>num_trips</td>\n",
       "      <td>3297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>num_stops</td>\n",
       "      <td>498</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>num_shapes</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>num_frequencies</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          indicator          value\n",
       "0          agencies     [Bilbobus]\n",
       "1  running_services            [1]\n",
       "2          timezone  Europe/Madrid\n",
       "3        start_date       20191210\n",
       "4          end_date       20191210\n",
       "5        num_routes             82\n",
       "6         num_trips           3297\n",
       "7         num_stops            498\n",
       "8        num_shapes              0\n",
       "9   num_frequencies              0"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feed.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "feed = feed.create_shapes()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjUuMS9kaXN0L2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjEyLjQubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjUuMS9kaXN0L2xlYWZsZXQuY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2Nzcy9ib290c3RyYXAubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvNC42LjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC4yL2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhd2Nkbi5naXRoYWNrLmNvbS9weXRob24tdmlzdWFsaXphdGlvbi9mb2xpdW0vbWFzdGVyL2ZvbGl1bS90ZW1wbGF0ZXMvbGVhZmxldC5hd2Vzb21lLnJvdGF0ZS5jc3MiLz4KICAgIDxzdHlsZT5odG1sLCBib2R5IHt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7bWFyZ2luOiAwO3BhZGRpbmc6IDA7fTwvc3R5bGU+CiAgICA8c3R5bGU+I21hcCB7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtsZWZ0OjA7fTwvc3R5bGU+CiAgICAKICAgICAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAgICAgI21hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCB7CiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgICAgICB0b3A6IDAuMCU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgCjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbGl1bS1tYXAiIGlkPSJtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQiID48L2Rpdj4KICAgICAgICAKPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkID0gTC5tYXAoCiAgICAgICAgICAgICAgICAibWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjZW50ZXI6IFswLCAwXSwKICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgICAgICAgICAgICAgIHpvb206IDEsCiAgICAgICAgICAgICAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgcHJlZmVyQ2FudmFzOiBmYWxzZSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIAoKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl85ZDc4MjA1OGY2ZDk0OTM1YTVmZjU2Y2JiYjAxNTVmYSA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgImh0dHBzOi8vY2FydG9kYi1iYXNlbWFwcy17c30uZ2xvYmFsLnNzbC5mYXN0bHkubmV0L2xpZ2h0X2FsbC97en0ve3h9L3t5fS5wbmciLAogICAgICAgICAgICAgICAgeyJhdHRyaWJ1dGlvbiI6ICJcdTAwMjZjb3B5OyBcdTAwM2NhIGhyZWY9XCJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiXHUwMDNlT3BlblN0cmVldE1hcFx1MDAzYy9hXHUwMDNlIGNvbnRyaWJ1dG9ycyBcdTAwMjZjb3B5OyBcdTAwM2NhIGhyZWY9XCJodHRwOi8vY2FydG9kYi5jb20vYXR0cmlidXRpb25zXCJcdTAwM2VDYXJ0b0RCXHUwMDNjL2FcdTAwM2UsIENhcnRvREIgXHUwMDNjYSBocmVmID1cImh0dHA6Ly9jYXJ0b2RiLmNvbS9hdHRyaWJ1dGlvbnNcIlx1MDAzZWF0dHJpYnV0aW9uc1x1MDAzYy9hXHUwMDNlIiwgImRldGVjdFJldGluYSI6IGZhbHNlLCAibWF4TmF0aXZlWm9vbSI6IDE4LCAibWF4Wm9vbSI6IDE4LCAibWluWm9vbSI6IDAsICJub1dyYXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLCAic3ViZG9tYWlucyI6ICJhYmMiLCAidG1zIjogZmFsc2V9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF8yNGQwMzkwMWFkZjc0ZGQ5OWMxZDQ3N2FlZDcwNDhlZiA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfNTM3MzU2YmU4ZDRiNDY3YWIyYTUzMjAwNDk5MTljMzQgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNzU0MTI0NDMwODcwOSwgLTIuOTQ3NDIwODU3NjQ2NjgyN10sIFs0My4yNzUzOTg1MTAwMDYyNTUsIC0yLjk0OTYxNzYxMjM3NDgyMl0sIFs0My4yNzY4NzcxNDE5MTc4ODYsIC0yLjk1MzIxNzE5MTgzODI0MDRdLCBbNDMuMjc2NTQ0Nzk5MjcxOTcsIC0yLjk1Mzg0NDExODA2ODUyOV0sIFs0My4yNzM4NDA5NDE2MzA4MiwgLTIuOTU1NDEyNzA3NTExMTU2M10sIFs0My4yNzE5MjU0OTgwMDkwMjYsIC0yLjk1MDA5NjM0NjEwMDM5OTddLCBbNDMuMjcxNzE2NTQ3MDg3NzA2LCAtMi45NDQ5MzU5MjQ2NzYzMzZdLCBbNDMuMjcwOTQ2Njg1Njk1OTc1LCAtMi45NDE1NDI4OTg4NDY2NTNdLCBbNDMuMjY3ODExOTU3ODQ2NzIsIC0yLjkzOTcyOTQ5OTI4OTcwM10sIFs0My4yNjU0Nzc0Njg1MDE4NjQsIC0yLjkzNjgwMDAwOTk1NTQ4NDNdLCBbNDMuMjYyODgzMjk0MTk3OTcsIC0yLjkzNTYzNzUxNzMwMDk2OV0sIFs0My4yNjI2OTA3NjE5NzcwMywgLTIuOTMzNzUwOTk2NDMxNTU5XSwgWzQzLjI2MTUyOTk0NjQwMDE3NCwgLTIuOTI4NDc2NTgwODg0NjUxM10sIFs0My4yNjE0Nzg4OTAwNjA5ODUsIC0yLjkyNzgyNzg1Njg1MTI4ODhdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjNjZjMmE1IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjNjZjMmE1IiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMjRkMDM5MDFhZGY3NGRkOTljMWQ0NzdhZWQ3MDQ4ZWYpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzMyNjRkMDgzY2Y1ODRhZTA5MjE0Yjg2YmQ1YmU3NDlmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wMjRjNTA5MTg2N2I0MWMzYWE0OGYzMTc5ZWI2NGUzYiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDI0YzUwOTE4NjdiNDFjM2FhNDhmMzE3OWViNjRlM2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MTg5PC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzAwOTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gUGxhemEgQmlyaWJpbGE8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDE0NjY4PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzMyNjRkMDgzY2Y1ODRhZTA5MjE0Yjg2YmQ1YmU3NDlmLnNldENvbnRlbnQoaHRtbF8wMjRjNTA5MTg2N2I0MWMzYWE0OGYzMTc5ZWI2NGUzYik7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV81MzczNTZiZThkNGI0NjdhYjJhNTMyMDA0OTkxOWMzNC5iaW5kUG9wdXAocG9wdXBfMzI2NGQwODNjZjU4NGFlMDkyMTRiODZiZDViZTc0OWYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwX2JmZmMxMjE0ZWNmYTRiMTg4MDMxNDg0YTQyM2U0N2MxID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV9mZmM1MWYzNzE5YzU0MGIxOTNjZDYxYThlMjk2ZDNiOSA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI2MTQ3ODg5MDA2MDk4NSwgLTIuOTI3ODI3ODU2ODUxMjg4OF0sIFs0My4yNjI3MDk4NjczOTA5NywgLTIuOTMzNDU3MjM4NzAyMTU3NF0sIFs0My4yNjM5MzA5OTA4NzgzMzYsIC0yLjkzNTU1NjkzNjU1NTUxM10sIFs0My4yNjU4NjQ3MzYxNzM4MywgLTIuOTM2OTgyMjA4NDY4MzIxN10sIFs0My4yNjc1NzYzMjE1NjgxODUsIC0yLjkzOTM3MDA1NjYyMDQ1Nl0sIFs0My4yNzEwMjYwMjQyMTUwMDQsIC0yLjk0MTIzOTg3ODY2NjQ0NV0sIFs0My4yNzE5NDc4MDYwNzU0NywgLTIuOTQ1MDg1Mzk1NzcyMjU0N10sIFs0My4yNzIxMjE1NzU0Nzk0OSwgLTIuOTUwNTk0MjA4NzM2MjkxNV0sIFs0My4yNzM2NTIyNDAwMDE3MjQsIC0yLjk1NDQyNzg1MTkyNzc1NDVdLCBbNDMuMjc1MzgzMTE2MjY1NjMsIC0yLjk1MzY0MzMxODAwOTYwMzZdLCBbNDMuMjc1NDQ4MDYyNzQ5MjQsIC0yLjk1MjM5NTU3MjUyMjQ3NjZdLCBbNDMuMjc0MTQwNDIwNzkzNTcsIC0yLjk0OTc0MTM5MTg3MzAzXSwgWzQzLjI3NDA5ODk4NTExNTY1LCAtMi45NDg0NTk0MTkyMDE0NDE3XSwgWzQzLjI3NDQ3NDU2NzE5MzYxNCwgLTIuOTQ3MTk5NTYwNzY5ODgzOF0sIFs0My4yNzU0MTI0NDMwODcwOSwgLTIuOTQ3NDIwODU3NjQ2NjgyN11dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNmYzhkNjIiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiNmYzhkNjIiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF9iZmZjMTIxNGVjZmE0YjE4ODAzMTQ4NGE0MjNlNDdjMSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTI5NmQ0NzAyNWNlNDZlNGFlZjljZmYxM2ZhMmY0ZTEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2MzMjI1ZGIyZTM5YTRlZjg4YmZjMzllMGE4NmQ2N2I1ID0gJChgPGRpdiBpZD0iaHRtbF9jMzIyNWRiMmUzOWE0ZWY4OGJmYzM5ZTBhODZkNjdiNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4xOTA8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDk1PC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBQbGF6YSBCaXJpYmlsYTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaWQ8L3RoPjx0ZD40MTQ3ODA8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYTI5NmQ0NzAyNWNlNDZlNGFlZjljZmYxM2ZhMmY0ZTEuc2V0Q29udGVudChodG1sX2MzMjI1ZGIyZTM5YTRlZjg4YmZjMzllMGE4NmQ2N2I1KTsKICAgICAgICAKCiAgICAgICAgcG9seV9saW5lX2ZmYzUxZjM3MTljNTQwYjE5M2NkNjFhOGUyOTZkM2I5LmJpbmRQb3B1cChwb3B1cF9hMjk2ZDQ3MDI1Y2U0NmU0YWVmOWNmZjEzZmEyZjRlMSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfZDk1N2UzMTdmOTMzNDg4MDgwOTc3NDZiN2MyZTQwYWQgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9seV9saW5lX2UyNDk5ZmViYTEyZDQ2YWFiYjM2MjE2YmU1OThmMDlkID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgIFtbNDMuMjYxNDQ4MTY4MjA1NzksIC0yLjkyNzE5MDE3NDYzNDg2ODddLCBbNDMuMjY0MDk5NTEzNTAwMDIsIC0yLjkyMjU5MDExMjA3MjU4NzddLCBbNDMuMjY0NzUwMzczNTQ3MDQ1LCAtMi45MTg0MTM4ODAwMzU5OTg0XSwgWzQzLjI2MDc4NTE3ODMyNTU1LCAtMi45MTQ4MDQ0NTQxOTYwMTgzXSwgWzQzLjI1ODk4MTU3MTM1NjcwNiwgLTIuOTEzODY3MDU3NDIzNzQzN10sIFs0My4yNTc4MzA4MzMzNDQ4NSwgLTIuOTA5NzAyMjI5ODEzNzU0XSwgWzQzLjI2MDMyOTE0NDY3ODQ2NSwgLTIuOTA0NzQ3MTQyMzEyNzMyXSwgWzQzLjI1ODQ0MDgwNTQ5MjA2NCwgLTIuOTAyNzIyODkyNDc1MTc3XSwgWzQzLjI1OTY5NTc4MTEzMjM2NSwgLTIuOTAwNDcxNzA5MjEyMjQ0NV0sIFs0My4yNjEzMzYwNzQwMDY5OCwgLTIuODk5NTc4Njg4OTM2MzIxM10sIFs0My4yNjA4MTQ4MDkwMDg3NCwgLTIuODk2NjU4ODQyMDIzMjczN11dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4ZGEwY2IiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiM4ZGEwY2IiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF9kOTU3ZTMxN2Y5MzM0ODgwODA5Nzc0NmI3YzJlNDBhZCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODMwZjhlZTA4NWJiNGU4OWFjZjk4NmM4N2JkZDNmZWEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzAzNThhOTAzZmRkMjQ4N2E5ZDg3NWM4NWQzMDBmMWIyID0gJChgPGRpdiBpZD0iaHRtbF8wMzU4YTkwM2ZkZDI0ODdhOWQ4NzVjODVkMzAwZjFiMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4xOTE8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDg3PC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBPdHhhcmtvYWdhPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQwOTAxODwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84MzBmOGVlMDg1YmI0ZTg5YWNmOTg2Yzg3YmRkM2ZlYS5zZXRDb250ZW50KGh0bWxfMDM1OGE5MDNmZGQyNDg3YTlkODc1Yzg1ZDMwMGYxYjIpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfZTI0OTlmZWJhMTJkNDZhYWJiMzYyMTZiZTU5OGYwOWQuYmluZFBvcHVwKHBvcHVwXzgzMGY4ZWUwODViYjRlODlhY2Y5ODZjODdiZGQzZmVhKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF82MTM5ZTg5MzcwOTY0YTZhOGQwNjRiMjNjZWI3M2EwYiA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfY2RlZGIyMTJhM2FjNGVhZTk2YTY1ZTAxZjM5YmY0NDIgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNjA4MTQ4MDkwMDg3NCwgLTIuODk2NjU4ODQyMDIzMjczN10sIFs0My4yNjA4NDk2NDUxMjYxOSwgLTIuODk4ODI3MjM0NTIzMDQ1XSwgWzQzLjI1OTQwMjg3NjU4NzE3NCwgLTIuOTAwMzAxMzI2OTk2NDE1NV0sIFs0My4yNTg2NzY0NzgzODEzOTYsIC0yLjkwMjcyMDQ2OTkyMDg0ODRdLCBbNDMuMjYwMzkzNjA5NTAwMTEsIC0yLjkwNDY1OTU3MTE4NTcxNF0sIFs0My4yNTg5MDQ5Nzc2ODYxMywgLTIuOTA5MDQxNTI3MDgyMjc2XSwgWzQzLjI1Njg1NDkxMTk4MjI4LCAtMi45MTE2NTk1MTY0NDQ5NDEzXSwgWzQzLjI2MTUzMTAwMjA2NTQxLCAtMi45MTUyNzQyNjc1NDQ0NDY3XSwgWzQzLjI2MDMxNTU0NzMwNzYxLCAtMi45MTQwNDQ0NDYwMzY0NTVdLCBbNDMuMjY0OTAwMjczODQ1NDYsIC0yLjkxODMzNTczMjIwMDI2MDhdLCBbNDMuMjY0OTgyMjYxMjg4NzUsIC0yLjkyMjQ3NjQ3MDc1MDI1OTddLCBbNDMuMjYyODQ1MTIxMTIyMTA1LCAtMi45MjMwNTkxNDMzOTk4NjE2XSwgWzQzLjI1OTc5NTgzMzEyMzI5LCAtMi45MjQwODcyNzkzMTM5NDldLCBbNDMuMjYxNDQ4MTY4MjA1NzksIC0yLjkyNzE5MDE3NDYzNDg2ODddXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjZTc4YWMzIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjZTc4YWMzIiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNjEzOWU4OTM3MDk2NGE2YThkMDY0YjIzY2ViNzNhMGIpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzk0YjU2ZjhlODM5MTRhYjVhMTI1YmVjYjExNWJlMThiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hYTMwZWM5NTQwZWU0MGIxOTMwYzVjN2JjYjExOTI5ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYWEzMGVjOTU0MGVlNDBiMTkzMGM1YzdiY2IxMTkyOWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MTkyPC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzAyMDwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gT3R4YXJrb2FnYTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaWQ8L3RoPjx0ZD40MDkyODU8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOTRiNTZmOGU4MzkxNGFiNWExMjViZWNiMTE1YmUxOGIuc2V0Q29udGVudChodG1sX2FhMzBlYzk1NDBlZTQwYjE5MzBjNWM3YmNiMTE5MjlmKTsKICAgICAgICAKCiAgICAgICAgcG9seV9saW5lX2NkZWRiMjEyYTNhYzRlYWU5NmE2NWUwMWYzOWJmNDQyLmJpbmRQb3B1cChwb3B1cF85NGI1NmY4ZTgzOTE0YWI1YTEyNWJlY2IxMTViZTE4YikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfZTBhZGU1YWMyMWFjNDkxNTk0MWYwNWRiYmNjNDI1MTYgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9seV9saW5lX2Q3NDI5ZDcxY2UyNjQ2M2RiMjI3ZjJlNmU2NzkzZTI1ID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgIFtbNDMuMjg0MDU2MTY2NDE3NTcsIC0yLjk2NTQ0MzE0MTQ0ODg1Nl0sIFs0My4yODE3MzE3Mjk2MjMwNTQsIC0yLjk2MzAyNTEyNDA1MjExMDRdLCBbNDMuMjc5NDA0OTE2MjU2NDUsIC0yLjk2MTczNzkxOTg0MTYyODVdLCBbNDMuMjc3NzA5MjI2MDA4MzUsIC0yLjk2MDc5MjY0NTkwMTI1N10sIFs0My4yNzU4NzIxMjM4MzEwMiwgLTIuOTU5NzY0OTM3ODI4NjEzN10sIFs0My4yNzM3NjkyMjM3MjM0MzQsIC0yLjk1NzU0ODE4OTAzMzQ1NzRdLCBbNDMuMjcyNzEwNDIyMzU5NjUsIC0yLjk1NTQzNTEyMjQzMjUzM10sIFs0My4yNzE5MjU0OTgwMDkwMjYsIC0yLjk1MDA5NjM0NjEwMDM5OTddLCBbNDMuMjcxNzE2NTQ3MDg3NzA2LCAtMi45NDQ5MzU5MjQ2NzYzMzZdLCBbNDMuMjcwOTQ2Njg1Njk1OTc1LCAtMi45NDE1NDI4OTg4NDY2NTNdLCBbNDMuMjY3ODExOTU3ODQ2NzIsIC0yLjkzOTcyOTQ5OTI4OTcwM10sIFs0My4yNjU0Nzc0Njg1MDE4NjQsIC0yLjkzNjgwMDAwOTk1NTQ4NDNdLCBbNDMuMjYyODgzMjk0MTk3OTcsIC0yLjkzNTYzNzUxNzMwMDk2OV0sIFs0My4yNjI2OTA3NjE5NzcwMywgLTIuOTMzNzUwOTk2NDMxNTU5XSwgWzQzLjI2MTUyOTk0NjQwMDE3NCwgLTIuOTI4NDc2NTgwODg0NjUxM10sIFs0My4yNjE0Nzg4OTAwNjA5ODUsIC0yLjkyNzgyNzg1Njg1MTI4ODhdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjYTZkODU0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjYTZkODU0IiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZTBhZGU1YWMyMWFjNDkxNTk0MWYwNWRiYmNjNDI1MTYpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzBhMzBkNzU4Mjg1YzQ2OTU4OGE4YzgzZDI1YmNmODc4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xZWJiNjk5Njk4N2U0ODNmODhhZGI2ZDE3NGEzMDQwZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMWViYjY5OTY5ODdlNDgzZjg4YWRiNmQxNzRhMzA0MGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MTkzPC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzAwMzwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gUGxhemEgQmlyaWJpbGE8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDEzMjQyPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzBhMzBkNzU4Mjg1YzQ2OTU4OGE4YzgzZDI1YmNmODc4LnNldENvbnRlbnQoaHRtbF8xZWJiNjk5Njk4N2U0ODNmODhhZGI2ZDE3NGEzMDQwZSk7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV9kNzQyOWQ3MWNlMjY0NjNkYjIyN2YyZTZlNjc5M2UyNS5iaW5kUG9wdXAocG9wdXBfMGEzMGQ3NTgyODVjNDY5NTg4YThjODNkMjViY2Y4NzgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzM1NWRjMWU1YWJhZTQ5YWNiYjQ2ZTIxYTYzZjg4NjY2ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV8wOTc0MjcxNjk4NGM0MjcyYWQ2MzI0ZjE1NjQ1ZWI4MyA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI2MTQ3ODg5MDA2MDk4NSwgLTIuOTI3ODI3ODU2ODUxMjg4OF0sIFs0My4yNjI3MDk4NjczOTA5NywgLTIuOTMzNDU3MjM4NzAyMTU3NF0sIFs0My4yNjM5MzA5OTA4NzgzMzYsIC0yLjkzNTU1NjkzNjU1NTUxM10sIFs0My4yNjU4NjQ3MzYxNzM4MywgLTIuOTM2OTgyMjA4NDY4MzIxN10sIFs0My4yNjc1NzYzMjE1NjgxODUsIC0yLjkzOTM3MDA1NjYyMDQ1Nl0sIFs0My4yNzEwMjYwMjQyMTUwMDQsIC0yLjk0MTIzOTg3ODY2NjQ0NV0sIFs0My4yNzE5NDc4MDYwNzU0NywgLTIuOTQ1MDg1Mzk1NzcyMjU0N10sIFs0My4yNzIxMjE1NzU0Nzk0OSwgLTIuOTUwNTk0MjA4NzM2MjkxNV0sIFs0My4yNzMzMDQ5MjgwMjI2LCAtMi45NTUzMzQ4MzE1MTMxOTEzXSwgWzQzLjI3NDcxOTYxNDAzNjU2LCAtMi45NTg1ODk1NzE0NTIyMTEyXSwgWzQzLjI3Njc3NjAxNTM1MjA1NiwgLTIuOTYwMDU2MTA1MTAyMzUzN10sIFs0My4yNzg4MzMzNTIwOTQ4NCwgLTIuOTYxMTk0NDA4MDM5ODQzNl0sIFs0My4yODE3MDUzMDI5NDA3MTUsIC0yLjk2MjgxMjg1MzU0Nzg5N10sIFs0My4yODM3OTczMzU3NzYzNTYsIC0yLjk2MjU5NjExNDU0Nzk3MDddLCBbNDMuMjg0MDU2MTY2NDE3NTcsIC0yLjk2NTQ0MzE0MTQ0ODg1Nl1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNmZmQ5MmYiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiNmZmQ5MmYiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zNTVkYzFlNWFiYWU0OWFjYmI0NmUyMWE2M2Y4ODY2Nik7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYWVjM2JmODcyNGNjNDc4Yzk3MjViM2RmNDBmZjE4ZjkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Q5MTc2ZTZiZGRmMTQyZmZhODlkYzAwYmUzMjczYWY1ID0gJChgPGRpdiBpZD0iaHRtbF9kOTE3NmU2YmRkZjE0MmZmYTg5ZGMwMGJlMzI3M2FmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4xOTQ8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDk0PC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBQbGF6YSBCaXJpYmlsYTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaWQ8L3RoPjx0ZD40MTMzODg8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYWVjM2JmODcyNGNjNDc4Yzk3MjViM2RmNDBmZjE4Zjkuc2V0Q29udGVudChodG1sX2Q5MTc2ZTZiZGRmMTQyZmZhODlkYzAwYmUzMjczYWY1KTsKICAgICAgICAKCiAgICAgICAgcG9seV9saW5lXzA5NzQyNzE2OTg0YzQyNzJhZDYzMjRmMTU2NDVlYjgzLmJpbmRQb3B1cChwb3B1cF9hZWMzYmY4NzI0Y2M0NzhjOTcyNWIzZGY0MGZmMThmOSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfMzkwN2E3ZjIyYzBhNDhlMThhZWI3ZTM2MjhmODhkZTIgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9seV9saW5lXzYyZDQ3NmRkNTViMzQzNjc5MWY5YWU5YjgxNzllODc2ID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgIFtbNDMuMjcwNjUwNzM2NDgyMjMsIC0yLjk1NjUyNDQ5MDkzMzY3MDVdLCBbNDMuMjcwNjkzOTg2MzUyNzUsIC0yLjk1NDkxNjUzODcyMDA4NzVdLCBbNDMuMjcxMjkxNDA0OTYxOTMsIC0yLjk1MjYwNTE2MzY1NjkxNl0sIFs0My4yNzE5MjU0OTgwMDkwMjYsIC0yLjk1MDA5NjM0NjEwMDM5OTddLCBbNDMuMjcwNjExODQ4NDM0MjUsIC0yLjk0NzM5MDc1MTY2OTIyMTVdLCBbNDMuMjY4NzA4Mjc3MDk4NjUsIC0yLjk0NzIzOTI0NDU4MTg5MDVdLCBbNDMuMjY5MTY2NDc1Mjk0Mjg0LCAtMi45NDM2MTc1ODc0MDcwNTZdLCBbNDMuMjY5NzYxMTg0NzcwMjgsIC0yLjk0MDcxOTkwMDUwNTQzNl0sIFs0My4yNzAxODEyNzk4MDU4OCwgLTIuOTM3Mjc0MDY1MjcxMDA0NV0sIFs0My4yNjk2ODAxMTIwNjY3OTQsIC0yLjkzMTM4MzA2MjgyNTQyNjVdLCBbNDMuMjY2NDM0OTAzODkxMzUsIC0yLjkyNjgyODE1MDA3NTM3M10sIFs0My4yNjQ0OTIxMzE2MDA2MSwgLTIuOTI0NTA2MDc1ODM0MzAzM10sIFs0My4yNjI4NDUxMjExMjIxMDUsIC0yLjkyMzA1OTE0MzM5OTg2MTZdLCBbNDMuMjYwNDExNTY5MTE0ODQ0LCAtMi45MjI5MzYxOTIyNTc1NDA1XSwgWzQzLjI1NzA5MDM0MjUzMzA3NSwgLTIuOTI3MTI5Mjk1MDc3OTIzN10sIFs0My4yNTQwODg0Nzk0MjQxMDUsIC0yLjkyNTA4MDM2ODg0MDg3MDZdLCBbNDMuMjU0NzczMDc3NzUxNTIsIC0yLjkyNjc0Mzg5NDM0MzA3NDRdLCBbNDMuMjU1MDI5MjYyODI1NzQ0LCAtMi45MjI1NTc3MjQ2MTc3MjZdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjZTVjNDk0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjZTVjNDk0IiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMzkwN2E3ZjIyYzBhNDhlMThhZWI3ZTM2MjhmODhkZTIpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzM3NzYzYmNjOWRmNjQwNzc5NDI1MzFmZTdkZjhkNjAxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xMDc4YzBhMGRiYjM0MTBhOGM0NTE3OTMwZjMyMWIxMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTA3OGMwYTBkYmIzNDEwYThjNDUxNzkzMGYzMjFiMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MTk1PC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzAwNTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gQXR4dXJpPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQyNDk4NjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8zNzc2M2JjYzlkZjY0MDc3OTQyNTMxZmU3ZGY4ZDYwMS5zZXRDb250ZW50KGh0bWxfMTA3OGMwYTBkYmIzNDEwYThjNDUxNzkzMGYzMjFiMTApOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfNjJkNDc2ZGQ1NWIzNDM2NzkxZjlhZTliODE3OWU4NzYuYmluZFBvcHVwKHBvcHVwXzM3NzYzYmNjOWRmNjQwNzc5NDI1MzFmZTdkZjhkNjAxKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF8wODkyNDdhZDIzZjg0MjUyOGUxZDc1Mjg2ZDQwOTEwYiA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfZmY0MmE4MmQ3OGMyNGEyZjhkZTk5MDYzOTNmMGMwZGQgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNTUwMjkyNjI4MjU3NDQsIC0yLjkyMjU1NzcyNDYxNzcyNl0sIFs0My4yNTY1OTYzMTQ4MTMzODYsIC0yLjkyNTcwNzkwNDcwOTQ1NDVdLCBbNDMuMjYwNDIwNjk3NjQ2MTU0LCAtMi45MjI3NTUzODI5MDc4NDU0XSwgWzQzLjI2MzkzODc1OTE4MDg4LCAtMi45MjM1NzkwODA0ODA3MjI3XSwgWzQzLjI2NjgzMDEyNjg3MjE4NiwgLTIuOTI3MjM2MDkzMTA1NjE4NV0sIFs0My4yNjkyMjY0MTE4MTI2NDYsIC0yLjkzMDMzNjUxNTYzMjcwOF0sIFs0My4yNzAyMjQzNDAwNzYwNTUsIC0yLjkzNzYwNDkwNDA5Nzc5Ml0sIFs0My4yNjk5ODIyMTU5NjMwMSwgLTIuOTQwMzI1NTExNDY2OTY3NV0sIFs0My4yNjkyNjQ5NDAxMjQzNiwgLTIuOTQzNjY1ODg4ODIyNzg0XSwgWzQzLjI3MDA3NDc3MjgzMzUxLCAtMi45NDY5NzEyNTgyMTE4MzMzXSwgWzQzLjI2OTgyNTU4ODEyNjEsIC0yLjk1MTgxNDE3MTg3NjM1MzNdLCBbNDMuMjcwNzg0MTI0NTE3MTg1LCAtMi45NTQ1MDUwNDM4MzE3NjM3XSwgWzQzLjI3MDcxNDEwMTI2MjM3LCAtMi45NTY4NDM4OTE5MDk4NjE2XSwgWzQzLjI3MDY1MDczNjQ4MjIzLCAtMi45NTY1MjQ0OTA5MzM2NzA1XV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2IzYjNiMyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAiI2IzYjNiMyIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJub0NsaXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLjAsICJzbW9vdGhGYWN0b3IiOiAxLjAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzA4OTI0N2FkMjNmODQyNTI4ZTFkNzUyODZkNDA5MTBiKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9iN2ZkMjg2MGQ1M2Y0NjFmYmFjNzJkZDgzYmI2YjU1MyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNTVmODJmMjExMDNlNDYwOGI1MWE3YTNhMTlkY2E0YTYgPSAkKGA8ZGl2IGlkPSJodG1sXzU1ZjgyZjIxMTAzZTQ2MDhiNTFhN2EzYTE5ZGNhNGE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1ob3ZlciI+PHRyPjx0aD5kaXJlY3Rpb25faWQ8L3RoPjx0ZD48L3RkPjwvdHI+PHRyPjx0aD5yb3V0ZV9pZDwvdGg+PHRkPjE5NjwvdGQ+PC90cj48dHI+PHRoPnNlcnZpY2VfaWQ8L3RoPjx0ZD4xPC90ZD48L3RyPjx0cj48dGg+c2hhcGVfaWQ8L3RoPjx0ZD5zaGFwZV8wMzg8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2hlYWRzaWduPC90aD48dGQ+IEF0eHVyaTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaWQ8L3RoPjx0ZD40MjUwNTE8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYjdmZDI4NjBkNTNmNDYxZmJhYzcyZGQ4M2JiNmI1NTMuc2V0Q29udGVudChodG1sXzU1ZjgyZjIxMTAzZTQ2MDhiNTFhN2EzYTE5ZGNhNGE2KTsKICAgICAgICAKCiAgICAgICAgcG9seV9saW5lX2ZmNDJhODJkNzhjMjRhMmY4ZGU5OTA2MzkzZjBjMGRkLmJpbmRQb3B1cChwb3B1cF9iN2ZkMjg2MGQ1M2Y0NjFmYmFjNzJkZDgzYmI2YjU1MykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfNzk3ZTdiNmNhYTkwNGJlM2IyN2I1NDM0NWM4OTEwNGIgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9seV9saW5lX2U4MDM2MzIxMjM4ZjRmOWU5ZjNlOWM3OWY4ZmY3NTk0ID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgIFtbNDMuMjgxNzMxNzI5NjIzMDU0LCAtMi45NjMwMjUxMjQwNTIxMTA0XSwgWzQzLjI3OTQwNDkxNjI1NjQ1LCAtMi45NjE3Mzc5MTk4NDE2Mjg1XSwgWzQzLjI3NzcwOTIyNjAwODM1LCAtMi45NjA3OTI2NDU5MDEyNTddLCBbNDMuMjc1ODcyMTIzODMxMDIsIC0yLjk1OTc2NDkzNzgyODYxMzddLCBbNDMuMjczNzY5MjIzNzIzNDM0LCAtMi45NTc1NDgxODkwMzM0NTc0XSwgWzQzLjI3MjcxMDQyMjM1OTY1LCAtMi45NTU0MzUxMjI0MzI1MzNdLCBbNDMuMjcxOTI1NDk4MDA5MDI2LCAtMi45NTAwOTYzNDYxMDAzOTk3XSwgWzQzLjI3MTcxNjU0NzA4NzcwNiwgLTIuOTQ0OTM1OTI0Njc2MzM2XSwgWzQzLjI3MDk0NjY4NTY5NTk3NSwgLTIuOTQxNTQyODk4ODQ2NjUzXSwgWzQzLjI2NzgxMTk1Nzg0NjcyLCAtMi45Mzk3Mjk0OTkyODk3MDNdLCBbNDMuMjY1NDc3NDY4NTAxODY0LCAtMi45MzY4MDAwMDk5NTU0ODQzXSwgWzQzLjI2Mjg4MzI5NDE5Nzk3LCAtMi45MzU2Mzc1MTczMDA5NjldLCBbNDMuMjYzNjI5NjMxODM5MDMsIC0yLjkzNDU4Njg5MDE2MTIzOV0sIFs0My4yNjY2OTEyOTkxMDU2MiwgLTIuOTMzMzM5OTczOTMwMTY4N10sIFs0My4yNjk2Njg2MTMzODM3MywgLTIuOTIyNDc5MjE0NDc4Mzc2NF0sIFs0My4yNjc2NDE0MTAyNDcwNiwgLTIuOTE4NDI2NjI0NzUxOTkyXSwgWzQzLjI2NTUzMDgyMTgxNzY1NiwgLTIuOTE2ODc4MDY3MzIwNjI4XSwgWzQzLjI2MDc4NTE3ODMyNTU1LCAtMi45MTQ4MDQ0NTQxOTYwMTgzXSwgWzQzLjI1Njg2MTMzODY2NDA0NSwgLTIuOTExOTkyOTM3NjY1OTQwNl0sIFs0My4yNTU2NTQ5NzI3NjkzLCAtMi45MTA4MjYzMjY2NTc5MDM1XSwgWzQzLjI0OTU1NjIyNTk1MDgxLCAtMi45MDg0MDE2MDAwMTYwNzhdLCBbNDMuMjUwMzg1NDMyMzA2OTU2LCAtMi45MTA2NjA1MDYyMDEzNzMzXSwgWzQzLjI0ODgzMzQ4MDg2ODg0NiwgLTIuOTA5MzQ3MDIzODU1NDMzNV0sIFs0My4yNDk4OTYwNzUwNTQzMiwgLTIuOTA4NjAzNTExMTkzOTIxXSwgWzQzLjI0ODY3MTEzODk1ODU4NSwgLTIuOTA2OTI3ODc1MjMwMDQ0XSwgWzQzLjI1MDcyMjgyNDczOTYsIC0yLjkwMzMyODY5NzQ4Njc4MjddLCBbNDMuMjUyNTYxOTM5Mjc3NjksIC0yLjkwMjMzNzA2MzEwODE5NTNdLCBbNDMuMjU1MDQ1MTY2ODQzMDU0LCAtMi45MDA5ODc5ODYzMjkyMzIzXV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzY2YzJhNSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAiIzY2YzJhNSIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJub0NsaXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLjAsICJzbW9vdGhGYWN0b3IiOiAxLjAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc5N2U3YjZjYWE5MDRiZTNiMjdiNTQzNDVjODkxMDRiKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF83OWU4N2YwZDhhMjk0OWY3ODMxNDRlYTk1MjAyN2I1MCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYjhlZDBkMDJhMzE1NGNhY2E5MjU1MDVkNmY4ZDE0NzggPSAkKGA8ZGl2IGlkPSJodG1sX2I4ZWQwZDAyYTMxNTRjYWNhOTI1NTA1ZDZmOGQxNDc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1ob3ZlciI+PHRyPjx0aD5kaXJlY3Rpb25faWQ8L3RoPjx0ZD48L3RkPjwvdHI+PHRyPjx0aD5yb3V0ZV9pZDwvdGg+PHRkPjE5NzwvdGQ+PC90cj48dHI+PHRoPnNlcnZpY2VfaWQ8L3RoPjx0ZD4xPC90ZD48L3RyPjx0cj48dGg+c2hhcGVfaWQ8L3RoPjx0ZD5zaGFwZV8wMDE8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2hlYWRzaWduPC90aD48dGQ+IFR4dXJkaW5hZ2E8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDA4MzI4PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzc5ZTg3ZjBkOGEyOTQ5Zjc4MzE0NGVhOTUyMDI3YjUwLnNldENvbnRlbnQoaHRtbF9iOGVkMGQwMmEzMTU0Y2FjYTkyNTUwNWQ2ZjhkMTQ3OCk7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV9lODAzNjMyMTIzOGY0ZjllOWYzZTljNzlmOGZmNzU5NC5iaW5kUG9wdXAocG9wdXBfNzllODdmMGQ4YTI5NDlmNzgzMTQ0ZWE5NTIwMjdiNTApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzc4NzZkZjMyYjhkZTRjMDRiNzQyZTEzMWVhMzM5Y2ViID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV9iYzlkNGNjMWM2Nzk0ZmFmYTM3YzFmMzBlNTUyMmJlZiA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI1NTA0NTE2Njg0MzA1NCwgLTIuOTAwOTg3OTg2MzI5MjMyM10sIFs0My4yNTYzMDMyMjI0NzYwNCwgLTIuOTAzODI3NTE5NTg3MzI5M10sIFs0My4yNTcwMzU1NTM1ODA1OCwgLTIuOTA2ODUyODQ1NDA1NzMxNF0sIFs0My4yNTc5NzUzNjQ3MzM0NTQsIC0yLjkxMDk1MTA4NDA1MjQ0OTNdLCBbNDMuMjYwNjU4MTQyOTQ3NTksIC0yLjkxMjU5NDY0MzM4ODA4OF0sIFs0My4yNjE1MzEwMDIwNjU0MSwgLTIuOTE1Mjc0MjY3NTQ0NDQ2N10sIFs0My4yNjU1MTM2NDMxMDg0NiwgLTIuOTE2NjgzMTA5MDc4MTY4XSwgWzQzLjI2NzgzMDM3MDM4OTU3NSwgLTIuOTE4NDM0ODUwMTgxOTkxNF0sIFs0My4yNjk4MzEzNzE0ODQ5MjYsIC0yLjkyMjU3Mjg0NTUxNzUwNzddLCBbNDMuMjcwMDgzODk0NzkwMjA0LCAtMi45MjYwMDM1NjIxMjI4NzMzXSwgWzQzLjI2NjA4NDkwNzYxNTkyLCAtMi45MzM3MDU4MzQ2MDc2NjYzXSwgWzQzLjI2MzkzMDk5MDg3ODMzNiwgLTIuOTM1NTU2OTM2NTU1NTEzXSwgWzQzLjI2NTg2NDczNjE3MzgzLCAtMi45MzY5ODIyMDg0NjgzMjE3XSwgWzQzLjI2NzU3NjMyMTU2ODE4NSwgLTIuOTM5MzcwMDU2NjIwNDU2XSwgWzQzLjI3MTAyNjAyNDIxNTAwNCwgLTIuOTQxMjM5ODc4NjY2NDQ1XSwgWzQzLjI3MTk0NzgwNjA3NTQ3LCAtMi45NDUwODUzOTU3NzIyNTQ3XSwgWzQzLjI3MjEyMTU3NTQ3OTQ5LCAtMi45NTA1OTQyMDg3MzYyOTE1XSwgWzQzLjI3MzMwNDkyODAyMjYsIC0yLjk1NTMzNDgzMTUxMzE5MTNdLCBbNDMuMjc0NzE5NjE0MDM2NTYsIC0yLjk1ODU4OTU3MTQ1MjIxMTJdLCBbNDMuMjc2Nzc2MDE1MzUyMDU2LCAtMi45NjAwNTYxMDUxMDIzNTM3XSwgWzQzLjI3ODgzMzM1MjA5NDg0LCAtMi45NjExOTQ0MDgwMzk4NDM2XSwgWzQzLjI4MTcwNTMwMjk0MDcxNSwgLTIuOTYyODEyODUzNTQ3ODk3XSwgWzQzLjI4MTczMTcyOTYyMzA1NCwgLTIuOTYzMDI1MTI0MDUyMTEwNF1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNmYzhkNjIiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiNmYzhkNjIiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83ODc2ZGYzMmI4ZGU0YzA0Yjc0MmUxMzFlYTMzOWNlYik7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNzE2NzRhMjJmYmU0NDA4OGExMTE1ODFkZjY0MTViMTIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzRlNTBhYWVjYjZmNDQ5ODM4ZmFiN2FlM2YwMzZiYzhkID0gJChgPGRpdiBpZD0iaHRtbF80ZTUwYWFlY2I2ZjQ0OTgzOGZhYjdhZTNmMDM2YmM4ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4xOTg8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDI1PC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBUeHVyZGluYWdhPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQwODUxMDwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83MTY3NGEyMmZiZTQ0MDg4YTExMTU4MWRmNjQxNWIxMi5zZXRDb250ZW50KGh0bWxfNGU1MGFhZWNiNmY0NDk4MzhmYWI3YWUzZjAzNmJjOGQpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfYmM5ZDRjYzFjNjc5NGZhZmEzN2MxZjMwZTU1MjJiZWYuYmluZFBvcHVwKHBvcHVwXzcxNjc0YTIyZmJlNDQwODhhMTExNTgxZGY2NDE1YjEyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF8yNjJiNDI5ZTZlMzA0YWQwYTQzZTgwYTk1ZGEyOTgzNiA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfNmQxOTkwZDhkODU0NGI2ZmIzYzQ4NDkzYTk0ZDZkNzMgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yODE3MzE3Mjk2MjMwNTQsIC0yLjk2MzAyNTEyNDA1MjExMDRdLCBbNDMuMjc5NDA0OTE2MjU2NDUsIC0yLjk2MTczNzkxOTg0MTYyODVdLCBbNDMuMjc3NzA5MjI2MDA4MzUsIC0yLjk2MDc5MjY0NTkwMTI1N10sIFs0My4yNzU4NzIxMjM4MzEwMiwgLTIuOTU5NzY0OTM3ODI4NjEzN10sIFs0My4yNzM3NjkyMjM3MjM0MzQsIC0yLjk1NzU0ODE4OTAzMzQ1NzRdLCBbNDMuMjcyNzEwNDIyMzU5NjUsIC0yLjk1NTQzNTEyMjQzMjUzM10sIFs0My4yNzE5MjU0OTgwMDkwMjYsIC0yLjk1MDA5NjM0NjEwMDM5OTddLCBbNDMuMjcxNzE2NTQ3MDg3NzA2LCAtMi45NDQ5MzU5MjQ2NzYzMzZdLCBbNDMuMjcwOTQ2Njg1Njk1OTc1LCAtMi45NDE1NDI4OTg4NDY2NTNdLCBbNDMuMjY3ODExOTU3ODQ2NzIsIC0yLjkzOTcyOTQ5OTI4OTcwM10sIFs0My4yNjU0Nzc0Njg1MDE4NjQsIC0yLjkzNjgwMDAwOTk1NTQ4NDNdLCBbNDMuMjYyODgzMjk0MTk3OTcsIC0yLjkzNTYzNzUxNzMwMDk2OV0sIFs0My4yNjEyMTk2NTg3NSwgLTIuOTM0MTAxMjg1OTQwNTZdLCBbNDMuMjU4MTgyOTYwNTUwMzY0LCAtMi45MzUzNDc3NDg2NDMyOTk1XSwgWzQzLjI1NzQ4MjEyNDEzMTIsIC0yLjkzNzg1OTExMzA3OTIyNV0sIFs0My4yNTc3MTg2NDA0NDI0LCAtMi45NDI3MzgwMDIzMjY5OTQ1XSwgWzQzLjI1ODAwMDE5Mjc4OTYsIC0yLjk0OTA1MjUyOTEyOTYyMTVdLCBbNDMuMjYwMTAxMTU2ODc4MTgsIC0yLjk1Mjk3MTQ5Mzc1NTIwOTRdLCBbNDMuMjYyODE2NTYwMzAzMjgsIC0yLjk1NjM5OTc1NzUzMTYwNTddLCBbNDMuMjY0OTcyMTE1MzUxNjksIC0yLjk2MTIyMTA3NDYxMzAyNDNdLCBbNDMuMjc1Njg3MTg2OTA4NiwgLTIuOTcxOTAwMDE3MzYyNzM3N10sIFs0My4yNzMyMDY1NTg5ODYyOCwgLTIuOTcxNTc2MTQ5MzQ4MjI0XSwgWzQzLjI3MTk2NDk5NzA2NDkzNCwgLTIuOTY5NDM2NDA2NDgwNzg2M10sIFs0My4yNzExMjM4ODUzMzAxMzQsIC0yLjk3MDk5NjI4MDY5NTAxNDhdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjOGRhMGNiIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjOGRhMGNiIiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMjYyYjQyOWU2ZTMwNGFkMGE0M2U4MGE5NWRhMjk4MzYpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzk4OGYzYTVhMjc4NTQ0ZjliZWFlODY3N2E5NjQ2ODk1ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83NDU3ZjAyMjI5Mzg0MGRlYWE1OTk0OTQ0YWZmNmVhZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzQ1N2YwMjIyOTM4NDBkZWFhNTk5NDk0NGFmZjZlYWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MTk5PC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzAwMjwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gWm9ycm90emE8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDE0MzM0PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzk4OGYzYTVhMjc4NTQ0ZjliZWFlODY3N2E5NjQ2ODk1LnNldENvbnRlbnQoaHRtbF83NDU3ZjAyMjI5Mzg0MGRlYWE1OTk0OTQ0YWZmNmVhZSk7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV82ZDE5OTBkOGQ4NTQ0YjZmYjNjNDg0OTNhOTRkNmQ3My5iaW5kUG9wdXAocG9wdXBfOTg4ZjNhNWEyNzg1NDRmOWJlYWU4Njc3YTk2NDY4OTUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwX2JkZWI2NWNmYTk2YzRmOWM5NzNjMDMxMDU3NWFlNTA3ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV81MTZmMTQ4NDc2MDU0Njc0YjA3YmNjOWZhYzRhMzA0MiA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI3MTEyMzg4NTMzMDEzNCwgLTIuOTcwOTk2MjgwNjk1MDE0OF0sIFs0My4yNzIxODc0MDEwNDIyNSwgLTIuOTY5MjQxODg2NjQ5NTcyN10sIFs0My4yNzMzOTkzNDY5NDgzOTUsIC0yLjk3MDYyODY5MzE4MTIwMzZdLCBbNDMuMjc1MDE3ODcxMzM1NDQsIC0yLjk3MjcxNjk5OTgwODgzMjddLCBbNDMuMjc3NDcwNDEyNzcyMzUsIC0yLjk3NDk0OTY5NDI1NDcyNTNdLCBbNDMuMjc2NjQ4MzIzMjk0OTM1LCAtMi45NzIxNjA1ODE1MDY5ODg1XSwgWzQzLjI2NDcyNDY4MDc1OTA4LCAtMi45NjExNDk5MDE0NjYwMjE2XSwgWzQzLjI2MjU0NzA5MTA5MzAwNSwgLTIuOTU2MzI4OTUzNDE4MjUzM10sIFs0My4yNTk0NjAwNDMzMDAxNSwgLTIuOTUyMjY5MTkzMzg1ODUzNF0sIFs0My4yNTc5NDQ4NTg2MzgwNywgLTIuOTQ5MDU1NDY4Njc2Mjg5M10sIFs0My4yNTc1ODc1Mzc3MDQxMDQsIC0yLjk0MjUyMzg1ODY3ODQzNV0sIFs0My4yNTgwNjQ0NTA0MzA1MjQsIC0yLjkzODUyNzI2Njk5MzAwMDddLCBbNDMuMjYwNjQwOTAyNzk5NTUsIC0yLjkzNzM5NDY3NDYzNzU1NjhdLCBbNDMuMjYyODA0NTE1NzY3ODEsIC0yLjkzNjQ5MTk1NjUwOTc0MjNdLCBbNDMuMjY1ODY0NzM2MTczODMsIC0yLjkzNjk4MjIwODQ2ODMyMTddLCBbNDMuMjY3NTc2MzIxNTY4MTg1LCAtMi45MzkzNzAwNTY2MjA0NTZdLCBbNDMuMjcxMDI2MDI0MjE1MDA0LCAtMi45NDEyMzk4Nzg2NjY0NDVdLCBbNDMuMjcxOTQ3ODA2MDc1NDcsIC0yLjk0NTA4NTM5NTc3MjI1NDddLCBbNDMuMjcyMTIxNTc1NDc5NDksIC0yLjk1MDU5NDIwODczNjI5MTVdLCBbNDMuMjczMzA0OTI4MDIyNiwgLTIuOTU1MzM0ODMxNTEzMTkxM10sIFs0My4yNzQ3MTk2MTQwMzY1NiwgLTIuOTU4NTg5NTcxNDUyMjExMl0sIFs0My4yNzY3NzYwMTUzNTIwNTYsIC0yLjk2MDA1NjEwNTEwMjM1MzddLCBbNDMuMjc4ODMzMzUyMDk0ODQsIC0yLjk2MTE5NDQwODAzOTg0MzZdLCBbNDMuMjgxNzA1MzAyOTQwNzE1LCAtMi45NjI4MTI4NTM1NDc4OTddLCBbNDMuMjgxNzMxNzI5NjIzMDU0LCAtMi45NjMwMjUxMjQwNTIxMTA0XV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2U3OGFjMyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAiI2U3OGFjMyIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJub0NsaXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLjAsICJzbW9vdGhGYWN0b3IiOiAxLjAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwX2JkZWI2NWNmYTk2YzRmOWM5NzNjMDMxMDU3NWFlNTA3KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xNTcyZmU1Yzk0MWQ0YWI2OWYxMWUzZWNlZmQ5NGMxNiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNGVjYjIxNzljZDExNDJiYjg4YjBiMWUwMjM1MGE1YjAgPSAkKGA8ZGl2IGlkPSJodG1sXzRlY2IyMTc5Y2QxMTQyYmI4OGIwYjFlMDIzNTBhNWIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1ob3ZlciI+PHRyPjx0aD5kaXJlY3Rpb25faWQ8L3RoPjx0ZD48L3RkPjwvdHI+PHRyPjx0aD5yb3V0ZV9pZDwvdGg+PHRkPjIwMDwvdGQ+PC90cj48dHI+PHRoPnNlcnZpY2VfaWQ8L3RoPjx0ZD4xPC90ZD48L3RyPjx0cj48dGg+c2hhcGVfaWQ8L3RoPjx0ZD5zaGFwZV8xMTk8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2hlYWRzaWduPC90aD48dGQ+IFpvcnJvdHphPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQxNDQ3ODwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xNTcyZmU1Yzk0MWQ0YWI2OWYxMWUzZWNlZmQ5NGMxNi5zZXRDb250ZW50KGh0bWxfNGVjYjIxNzljZDExNDJiYjg4YjBiMWUwMjM1MGE1YjApOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfNTE2ZjE0ODQ3NjA1NDY3NGIwN2JjYzlmYWM0YTMwNDIuYmluZFBvcHVwKHBvcHVwXzE1NzJmZTVjOTQxZDRhYjY5ZjExZTNlY2VmZDk0YzE2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF8yYzQ2NGRhNWExMDE0MjA0OTg5MDIwYTYwZTZiN2MxYiA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfYmExM2NlMzc0MmY2NDZiNmI5YjM0YzkwZjUxNDRiMmYgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNTUwMjkyNjI4MjU3NDQsIC0yLjkyMjU1NzcyNDYxNzcyNl0sIFs0My4yNTY1OTYzMTQ4MTMzODYsIC0yLjkyNTcwNzkwNDcwOTQ1NDVdLCBbNDMuMjYwNDIwNjk3NjQ2MTU0LCAtMi45MjI3NTUzODI5MDc4NDU0XSwgWzQzLjI2MzkzODc1OTE4MDg4LCAtMi45MjM1NzkwODA0ODA3MjI3XSwgWzQzLjI2NTIzMDg2NTMzMDkwNiwgLTIuOTI1MjIzOTc3ODMzMjQzNl0sIFs0My4yNjcxODQ2MDMzNzkwMTUsIC0yLjkyNTE4NDM2NjI3MTQ3ODddLCBbNDMuMjY5MzA3MTU0MzU4MywgLTIuOTI0NjExNTY4ODcyMTQ1XSwgWzQzLjI2NzE3NTU3MjQzNDQ2LCAtMi45MjEzMzQ1NDM1NDM1MjM0XSwgWzQzLjI2NzQzODAwNzgxMjE2LCAtMi45MTk4NzAwNDM3NTMyNzddLCBbNDMuMjY4MzE5OTIwNzcyODksIC0yLjkxODYxNDM1MDc4ODQwMl0sIFs0My4yNjkzMjExMjA3MDQ1LCAtMi45MTg2Mjk3MzY1MDA3ODk0XSwgWzQzLjI2Nzk5NDUzNzM0NzM2LCAtMi45MTU2ODQ3NzA5OTA0NTJdLCBbNDMuMjY1MzQ1NDk3OTc0ODEsIC0yLjkxMzMwNTM0NTkzNjQyNV0sIFs0My4yNjQ3NzI3MzM0NDM3MzUsIC0yLjkxMTc5NzgxNjY5NTgzNV0sIFs0My4yNjIyNTMwMzcyMjc3OSwgLTIuOTEzMDczMDM3ODA1MjY1NF0sIFs0My4yNjEyODk5NzA3ODUzMzQsIC0yLjkxMTQ0ODk5MDc2Mjc5MDVdLCBbNDMuMjYzMDMwMTUwNDEyMSwgLTIuOTEwOTE1NjY5MTYzNTM0NV1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNhNmQ4NTQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiNhNmQ4NTQiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8yYzQ2NGRhNWExMDE0MjA0OTg5MDIwYTYwZTZiN2MxYik7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMjlhMGM3M2JmZThmNDdjYjllZjNkMzlhNTM1YmEyZTUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzEyNGE1ZjZmMWI3MjQ2YzFiNDZiMTNmYzI2NDhmZGUxID0gJChgPGRpdiBpZD0iaHRtbF8xMjRhNWY2ZjFiNzI0NmMxYjQ2YjEzZmMyNjQ4ZmRlMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMDE8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDM2PC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBBdHh1cmk8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDA2MzA1PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzI5YTBjNzNiZmU4ZjQ3Y2I5ZWYzZDM5YTUzNWJhMmU1LnNldENvbnRlbnQoaHRtbF8xMjRhNWY2ZjFiNzI0NmMxYjQ2YjEzZmMyNjQ4ZmRlMSk7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV9iYTEzY2UzNzQyZjY0NmI2YjliMzRjOTBmNTE0NGIyZi5iaW5kUG9wdXAocG9wdXBfMjlhMGM3M2JmZThmNDdjYjllZjNkMzlhNTM1YmEyZTUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzhhMGRmY2E3OWU5MTQ1Y2ZhMDk0NTkwMDM3ZjljNDNlID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV82OTAyYjkxZDcyMDg0OTUyYjI2Y2ZiNzljNmY0Mzg4OSA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI2MzAzMDE1MDQxMjEsIC0yLjkxMDkxNTY2OTE2MzUzNDVdLCBbNDMuMjYxMTIxNDI3MTk4OTIsIC0yLjkxMTIwMTgwMTUzNDg5NTVdLCBbNDMuMjYwNjU4MTQyOTQ3NTksIC0yLjkxMjU5NDY0MzM4ODA4OF0sIFs0My4yNjE1MzEwMDIwNjU0MSwgLTIuOTE1Mjc0MjY3NTQ0NDQ2N10sIFs0My4yNjQ5MDAyNzM4NDU0NiwgLTIuOTE4MzM1NzMyMjAwMjYwOF0sIFs0My4yNjQ5ODIyNjEyODg3NSwgLTIuOTIyNDc2NDcwNzUwMjU5N10sIFs0My4yNjI4NDUxMjExMjIxMDUsIC0yLjkyMzA1OTE0MzM5OTg2MTZdLCBbNDMuMjYwNDExNTY5MTE0ODQ0LCAtMi45MjI5MzYxOTIyNTc1NDA1XSwgWzQzLjI1NzA5MDM0MjUzMzA3NSwgLTIuOTI3MTI5Mjk1MDc3OTIzN10sIFs0My4yNTQwODg0Nzk0MjQxMDUsIC0yLjkyNTA4MDM2ODg0MDg3MDZdLCBbNDMuMjU0NzczMDc3NzUxNTIsIC0yLjkyNjc0Mzg5NDM0MzA3NDRdLCBbNDMuMjU1MDI5MjYyODI1NzQ0LCAtMi45MjI1NTc3MjQ2MTc3MjZdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjZmZkOTJmIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjZmZkOTJmIiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOGEwZGZjYTc5ZTkxNDVjZmEwOTQ1OTAwMzdmOWM0M2UpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2MwMWM4OGZhYmE0OTRkZDFiMmQ0YmM0ZjYwZTFhYmY2ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wOTE5NDgyODU3ODc0OTE1OTRmMTI2ZmY4ZDUzZjk1ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDkxOTQ4Mjg1Nzg3NDkxNTk0ZjEyNmZmOGQ1M2Y5NWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MjAyPC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzAxODwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gQXR4dXJpPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQwNjQ3MTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jMDFjODhmYWJhNDk0ZGQxYjJkNGJjNGY2MGUxYWJmNi5zZXRDb250ZW50KGh0bWxfMDkxOTQ4Mjg1Nzg3NDkxNTk0ZjEyNmZmOGQ1M2Y5NWUpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfNjkwMmI5MWQ3MjA4NDk1MmIyNmNmYjc5YzZmNDM4ODkuYmluZFBvcHVwKHBvcHVwX2MwMWM4OGZhYmE0OTRkZDFiMmQ0YmM0ZjYwZTFhYmY2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF9kMGM5NWVhZGZlZTQ0ZmRmOWRmMTM5MDk0NmYwNDQ1OSA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfZDJiMjZhYzRmMjY2NDYwMTk2ODNkMjcwZjA1YzFjM2YgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNDc5NzU3NzQ1NTkzNjQsIC0yLjk1MDY0NDA5MzA3NTMyMzVdLCBbNDMuMjQ5MDc2OTE3MzcxNjc0LCAtMi45NTAyNzAyODQ0NzkzNjhdLCBbNDMuMjUxMjE5OTg0ODExNDcsIC0yLjk0ODg3NjcyMDQ3NjU3M10sIFs0My4yNDk4MTg5NDc1Mjk3NTQsIC0yLjk0OTQ5NDA1Nzk1ODg5MTVdLCBbNDMuMjQ4NjUzODQzOTA5NjQsIC0yLjk0OTMwMjMxMjI5NDk3MTVdLCBbNDMuMjQ2OTMxMjAzNjE1MTYsIC0yLjk0ODI2MzkxOTQ3NDIwNDZdLCBbNDMuMjQ5NDE2OTc4MDE4NDk1LCAtMi45NDY2MTE2NDM0MTI2OTA2XSwgWzQzLjI1MjI1NjY0MzY4Njc2LCAtMi45NDYxODMzMzE4ODU3ODldLCBbNDMuMjU0MzMwODMwMzM3NCwgLTIuOTQ0NTk0Mzk5OTQxNzU4M10sIFs0My4yNTY2NDczMTU2MDE1NSwgLTIuOTQyMjY1MTIyMzIxMjcwNF0sIFs0My4yNTg2MDM4NTgwMjkwMywgLTIuOTQxMjUyMTYyMTAzMTQ1Nl0sIFs0My4yNjE1OTE0MzkwNDA0MiwgLTIuOTQwMDMyNDUwMTkwNzU2XSwgWzQzLjI2MzYxNTE0NjM1MzI3NCwgLTIuOTM5MTg3MzcxODk2MTk5XSwgWzQzLjI2MzE2OTEyMzc4MDI4LCAtMi45MzYwNTIwMTI1MDU5Mzg2XSwgWzQzLjI2MzYyOTYzMTgzOTAzLCAtMi45MzQ1ODY4OTAxNjEyMzldLCBbNDMuMjY2NjkxMjk5MTA1NjIsIC0yLjkzMzMzOTk3MzkzMDE2ODddLCBbNDMuMjY5NjY4NjEzMzgzNzMsIC0yLjkyMjQ3OTIxNDQ3ODM3NjRdLCBbNDMuMjY3NjQxNDEwMjQ3MDYsIC0yLjkxODQyNjYyNDc1MTk5Ml0sIFs0My4yNjU1MzA4MjE4MTc2NTYsIC0yLjkxNjg3ODA2NzMyMDYyOF0sIFs0My4yNjE0MTgyNjg1MTc4MTUsIC0yLjkxNTg3MDE2Nzk2NDgyXSwgWzQzLjI2MjM5MTQwMDA3MTE0NSwgLTIuOTE1MzA3MzU0MzgyOTQ5XSwgWzQzLjI2NDY2NjYxMjM3MDc5LCAtMi45MTM2MTQ4MjQyODU5Nzc2XSwgWzQzLjI2NDc3MjczMzQ0MzczNSwgLTIuOTExNzk3ODE2Njk1ODM1XSwgWzQzLjI2MjI1MzAzNzIyNzc5LCAtMi45MTMwNzMwMzc4MDUyNjU0XSwgWzQzLjI2MTI4OTk3MDc4NTMzNCwgLTIuOTExNDQ4OTkwNzYyNzkwNV1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNlNWM0OTQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiNlNWM0OTQiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF9kMGM5NWVhZGZlZTQ0ZmRmOWRmMTM5MDk0NmYwNDQ1OSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMWY3ZTcyYjNlZTJhNGI1MDg0NTFhYmQxMmIxOTFlMjYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2MzMmY2MjllNmVkYjQ0MTNhMWVmN2VjNjgzOWYxMTM5ID0gJChgPGRpdiBpZD0iaHRtbF9jMzJmNjI5ZTZlZGI0NDEzYTFlZjdlYzY4MzlmMTEzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMDM8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMTExPC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBCZXRvbGF0emE8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDE1Mjk5PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzFmN2U3MmIzZWUyYTRiNTA4NDUxYWJkMTJiMTkxZTI2LnNldENvbnRlbnQoaHRtbF9jMzJmNjI5ZTZlZGI0NDEzYTFlZjdlYzY4MzlmMTEzOSk7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV9kMmIyNmFjNGYyNjY0NjAxOTY4M2QyNzBmMDVjMWMzZi5iaW5kUG9wdXAocG9wdXBfMWY3ZTcyYjNlZTJhNGI1MDg0NTFhYmQxMmIxOTFlMjYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzdiNGJiY2U4ZmJhOTQxNzM5N2I5N2U5MDk3MTFkYWUxID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV9kNDYyZGMxMDQ2Nzc0OTUwYjk3MmU1NDlhZGYwNzRkNSA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI2MTI4OTk3MDc4NTMzNCwgLTIuOTExNDQ4OTkwNzYyNzkwNV0sIFs0My4yNjA2NTgxNDI5NDc1OSwgLTIuOTEyNTk0NjQzMzg4MDg4XSwgWzQzLjI2MTUzMTAwMjA2NTQxLCAtMi45MTUyNzQyNjc1NDQ0NDY3XSwgWzQzLjI2NTUxMzY0MzEwODQ2LCAtMi45MTY2ODMxMDkwNzgxNjhdLCBbNDMuMjY3ODMwMzcwMzg5NTc1LCAtMi45MTg0MzQ4NTAxODE5OTE0XSwgWzQzLjI2OTgzMTM3MTQ4NDkyNiwgLTIuOTIyNTcyODQ1NTE3NTA3N10sIFs0My4yNzAwODM4OTQ3OTAyMDQsIC0yLjkyNjAwMzU2MjEyMjg3MzNdLCBbNDMuMjY2MDg0OTA3NjE1OTIsIC0yLjkzMzcwNTgzNDYwNzY2NjNdLCBbNDMuMjYzMjg5NzI1MzM5NTUsIC0yLjkzNTk4NzI3NDM0NzM4MzRdLCBbNDMuMjYzNjQ0NjIyMzk5NTQ2LCAtMi45MzkyODYyNDU4MTI0MTA1XSwgWzQzLjI2MTE3MTIxMjU0MzEzLCAtMi45NDAyNzE5NzM5ODg0ODY0XSwgWzQzLjI1ODM1ODk1MTY3NjA0NCwgLTIuOTQxNDExMzc4Nzc1NjMxN10sIFs0My4yNTcyNzU0MTUxMjQ2OCwgLTIuOTQxNzI4OTUzNjU4ODg1XSwgWzQzLjI1NDM2NDAxMjk1OTA1LCAtMi45NDQ3MTg1MDE1ODgxMTE0XSwgWzQzLjI1Mjg4OTUzNTc0Mzk1NCwgLTIuOTQ2NDc5ODA0MjAzNTQ2NV0sIFs0My4yNTE2MDg4MjEyODg1MiwgLTIuOTQ3NTg4NDMzMzc1NTAwNV0sIFs0My4yNTE4ODg5NjY3NDI5NzUsIC0yLjk0ODkxMTU0NjM3MzkxNTddLCBbNDMuMjUxMjE5OTg0ODExNDcsIC0yLjk0ODg3NjcyMDQ3NjU3M10sIFs0My4yNDk4MTg5NDc1Mjk3NTQsIC0yLjk0OTQ5NDA1Nzk1ODg5MTVdLCBbNDMuMjQ4NjUzODQzOTA5NjQsIC0yLjk0OTMwMjMxMjI5NDk3MTVdLCBbNDMuMjQ2OTg4MzgzMTI1ODk1LCAtMi45NTA2MDIzMjQyOTE4NTk1XSwgWzQzLjI0Nzk3NTc3NDU1OTM2NCwgLTIuOTUwNjQ0MDkzMDc1MzIzNV1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNiM2IzYjMiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiNiM2IzYjMiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83YjRiYmNlOGZiYTk0MTczOTdiOTdlOTA5NzExZGFlMSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNmVkNDk1YjRlM2FlNDExMGFjMDA1NDQwNzc5YjEyODcgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzc2OTA0NTI4ZDJiOTRhMTFiM2Y4ZWFhOGY5Mzc0YWZjID0gJChgPGRpdiBpZD0iaHRtbF83NjkwNDUyOGQyYjk0YTExYjNmOGVhYThmOTM3NGFmYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMDQ8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDE2PC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBCZXRvbGF0emE8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDE1NDYxPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzZlZDQ5NWI0ZTNhZTQxMTBhYzAwNTQ0MDc3OWIxMjg3LnNldENvbnRlbnQoaHRtbF83NjkwNDUyOGQyYjk0YTExYjNmOGVhYThmOTM3NGFmYyk7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV9kNDYyZGMxMDQ2Nzc0OTUwYjk3MmU1NDlhZGYwNzRkNS5iaW5kUG9wdXAocG9wdXBfNmVkNDk1YjRlM2FlNDExMGFjMDA1NDQwNzc5YjEyODcpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzUzMTkzNzlmNzgxMjQwNWU4ZGNiZTI5MzM1MDIzYTJjID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV83MWJiZmY2NWQzMmE0OGE3ODYwYzVhMjU1MjlhM2I1ZSA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI2NTk2NDUxMjk5Nzk5NiwgLTIuOTE4MDg1NzMzMTAzNjc4Ml0sIFs0My4yNjQ5MDAyNzM4NDU0NiwgLTIuOTE4MzM1NzMyMjAwMjYwOF0sIFs0My4yNjY2OTg1ODIzOTgzNywgLTIuOTE5NTYwODIwMjg2NTMxM10sIFs0My4yNjcyNjE2NjA2Njg4ODYsIC0yLjkyMTUwNTA4NzA3NzIxN10sIFs0My4yNjY5MTQ2NTQzNzU2NiwgLTIuOTIyNzM0ODUyNzQ5MzE2XSwgWzQzLjI2ODA1MjU2OTI1NTkzNiwgLTIuOTI0NDQzNjg4MDc2MzMyXSwgWzQzLjI2NjIwODg5NDUyMjgyLCAtMi45MjU0OTA5Nzc4OTg2MDA3XSwgWzQzLjI2NDQ5MjEzMTYwMDYxLCAtMi45MjQ1MDYwNzU4MzQzMDMzXSwgWzQzLjI2Mjg0NTEyMTEyMjEwNSwgLTIuOTIzMDU5MTQzMzk5ODYxNl0sIFs0My4yNTk3OTU4MzMxMjMyOSwgLTIuOTI0MDg3Mjc5MzEzOTQ5XSwgWzQzLjI2MTczMjU4ODI2MTI4LCAtMi45Mjg5NjcwNDEzODU2NDgzXSwgWzQzLjI2MjcwOTg2NzM5MDk3LCAtMi45MzM0NTcyMzg3MDIxNTc0XSwgWzQzLjI2MzI4OTcyNTMzOTU1LCAtMi45MzU5ODcyNzQzNDczODM0XSwgWzQzLjI2MzY0NDYyMjM5OTU0NiwgLTIuOTM5Mjg2MjQ1ODEyNDEwNV0sIFs0My4yNjExNzEyMTI1NDMxMywgLTIuOTQwMjcxOTczOTg4NDg2NF0sIFs0My4yNjEzNTMxODczNDUxMTUsIC0yLjk0MTk5OTg1OTg1Mjc4NV0sIFs0My4yNjIxNTMxMDM5MjUwOTQsIC0yLjk0NTY0OTAzNzQ2MjQ5MTddLCBbNDMuMjYwNDQ1ODI2NjkwOTc2LCAtMi45NDcxNzI2MDI3Nzc4ODQ2XSwgWzQzLjI1ODAwMDE5Mjc4OTYsIC0yLjk0OTA1MjUyOTEyOTYyMTVdLCBbNDMuMjYwMTAxMTU2ODc4MTgsIC0yLjk1Mjk3MTQ5Mzc1NTIwOTRdLCBbNDMuMjYxMDA0NTk5OTg5MTg1LCAtMi45NTY1NzkwODc3NjI1MjQ0XSwgWzQzLjI2MTgxNjc0NjY2OTA4LCAtMi45NTk5NDk2NDU1MzE0OTFdLCBbNDMuMjYzNjk5MDMwNzMwMzIsIC0yLjk2MjYwNDcwNDEzODA5MV0sIFs0My4yNjMzNDk0ODU3Mzg0MiwgLTIuOTYzNDM3OTUzMTA3NzU3XV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzY2YzJhNSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAiIzY2YzJhNSIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJub0NsaXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLjAsICJzbW9vdGhGYWN0b3IiOiAxLjAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzMTkzNzlmNzgxMjQwNWU4ZGNiZTI5MzM1MDIzYTJjKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wNjA1Y2ZlNDIwOWI0NzM2ODIzZGYxOWMzZTNlMzE4ZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNTBiOGY5YzViNzYyNGYzZjgxMmU1MjRjMjMzNTZiZmQgPSAkKGA8ZGl2IGlkPSJodG1sXzUwYjhmOWM1Yjc2MjRmM2Y4MTJlNTI0YzIzMzU2YmZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1ob3ZlciI+PHRyPjx0aD5kaXJlY3Rpb25faWQ8L3RoPjx0ZD48L3RkPjwvdHI+PHRyPjx0aD5yb3V0ZV9pZDwvdGg+PHRkPjIwNTwvdGQ+PC90cj48dHI+PHRoPnNlcnZpY2VfaWQ8L3RoPjx0ZD4xPC90ZD48L3RyPjx0cj48dGg+c2hhcGVfaWQ8L3RoPjx0ZD5zaGFwZV8wMTQ8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2hlYWRzaWduPC90aD48dGQ+IEFsdGFtaXJhPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQxNjU0MzwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8wNjA1Y2ZlNDIwOWI0NzM2ODIzZGYxOWMzZTNlMzE4Zi5zZXRDb250ZW50KGh0bWxfNTBiOGY5YzViNzYyNGYzZjgxMmU1MjRjMjMzNTZiZmQpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfNzFiYmZmNjVkMzJhNDhhNzg2MGM1YTI1NTI5YTNiNWUuYmluZFBvcHVwKHBvcHVwXzA2MDVjZmU0MjA5YjQ3MzY4MjNkZjE5YzNlM2UzMThmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF84MzliMjg5ZGNlMjk0OTdiOWIyYTZiMjI1M2YzOTJmMSA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfZjljZGI1YWFlYTBhNDU5OWFjNmZiOTdiMmJmMjYxNzQgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNjMzNDk0ODU3Mzg0MiwgLTIuOTYzNDM3OTUzMTA3NzU3XSwgWzQzLjI2MzMwODA1MTgxNzE2LCAtMi45NjI0MDExNDYxMzI3NTRdLCBbNDMuMjYxMTUzODAwOTI1NzIsIC0yLjk1OTUyNjEzMTUwMTk5NjNdLCBbNDMuMjYwNjc1OTc0NDU4NTIsIC0yLjk1NTk0ODE0ODc5MTY5Ml0sIFs0My4yNTk5Njg4ODg2MTI3OTYsIC0yLjk1MTIzNzY2NjE1Mjg3MzZdLCBbNDMuMjYxMDEyNjUxNDk5MDQ0LCAtMi45NDg1NDc3MjAyMDM0NF0sIFs0My4yNjQ5MjYxNjUzNDEzMzYsIC0yLjk0NDA1OTk3MDk0MjI5MDhdLCBbNDMuMjY0MTQ3NDY5MTg4Nzg1LCAtMi45NDA1MTk1NDA0ODE0NjddLCBbNDMuMjYzMzQ4MDExNTQyNzQsIC0yLjkzNjg2OTI3MTAzMDI2MzddLCBbNDMuMjYyNjkwNzYxOTc3MDMsIC0yLjkzMzc1MDk5NjQzMTU1OV0sIFs0My4yNjE1Mjk5NDY0MDAxNzQsIC0yLjkyODQ3NjU4MDg4NDY1MTNdLCBbNDMuMjYzOTM4NzU5MTgwODgsIC0yLjkyMzU3OTA4MDQ4MDcyMjddLCBbNDMuMjY1MjMwODY1MzMwOTA2LCAtMi45MjUyMjM5Nzc4MzMyNDM2XSwgWzQzLjI2NzE4NDYwMzM3OTAxNSwgLTIuOTI1MTg0MzY2MjcxNDc4N10sIFs0My4yNjkzMDcxNTQzNTgzLCAtMi45MjQ2MTE1Njg4NzIxNDVdLCBbNDMuMjY3MTc1NTcyNDM0NDYsIC0yLjkyMTMzNDU0MzU0MzUyMzRdLCBbNDMuMjY2NzA5MTYyMjA4NzMsIC0yLjkxOTczNzk1NDEwODExNDNdLCBbNDMuMjY1OTY0NTEyOTk3OTk2LCAtMi45MTgwODU3MzMxMDM2NzgyXV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2ZjOGQ2MiIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAiI2ZjOGQ2MiIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJub0NsaXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLjAsICJzbW9vdGhGYWN0b3IiOiAxLjAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzgzOWIyODlkY2UyOTQ5N2I5YjJhNmIyMjUzZjM5MmYxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84MDM0NDZmYjY3ODk0MTIyYjc3MTQ2OGJiOGEwOWM1ZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZWIwOTljNWNmZjc1NDNhMGIyNmNjZTExYjk0YWJjNjAgPSAkKGA8ZGl2IGlkPSJodG1sX2ViMDk5YzVjZmY3NTQzYTBiMjZjY2UxMWI5NGFiYzYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1ob3ZlciI+PHRyPjx0aD5kaXJlY3Rpb25faWQ8L3RoPjx0ZD48L3RkPjwvdHI+PHRyPjx0aD5yb3V0ZV9pZDwvdGg+PHRkPjIwNjwvdGQ+PC90cj48dHI+PHRoPnNlcnZpY2VfaWQ8L3RoPjx0ZD4xPC90ZD48L3RyPjx0cj48dGg+c2hhcGVfaWQ8L3RoPjx0ZD5zaGFwZV8xMjI8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2hlYWRzaWduPC90aD48dGQ+IEFsdGFtaXJhPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQxNjcyNjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84MDM0NDZmYjY3ODk0MTIyYjc3MTQ2OGJiOGEwOWM1Zi5zZXRDb250ZW50KGh0bWxfZWIwOTljNWNmZjc1NDNhMGIyNmNjZTExYjk0YWJjNjApOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfZjljZGI1YWFlYTBhNDU5OWFjNmZiOTdiMmJmMjYxNzQuYmluZFBvcHVwKHBvcHVwXzgwMzQ0NmZiNjc4OTQxMjJiNzcxNDY4YmI4YTA5YzVmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF8yMWZmODNhMTNmZGE0YzcwOWU2ZWI5OTAwMTM1MDY5MyA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfYmM1N2E2MmU3YTUzNGVhN2JiZTk0MWY2YjdiMDU5ZjcgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNTA4MTg2NzYzMTU4NywgLTIuOTA0NjM2MTQ2NzgwNDk5OF0sIFs0My4yNTI1NjE5MzkyNzc2OSwgLTIuOTAyMzM3MDYzMTA4MTk1M10sIFs0My4yNTUwNDUxNjY4NDMwNTQsIC0yLjkwMDk4Nzk4NjMyOTIzMjNdLCBbNDMuMjU2MzAzMjIyNDc2MDQsIC0yLjkwMzgyNzUxOTU4NzMyOTNdLCBbNDMuMjU3MDM1NTUzNTgwNTgsIC0yLjkwNjg1Mjg0NTQwNTczMTRdLCBbNDMuMjU3OTc1MzY0NzMzNDU0LCAtMi45MTA5NTEwODQwNTI0NDkzXSwgWzQzLjI2MDY1ODE0Mjk0NzU5LCAtMi45MTI1OTQ2NDMzODgwODhdLCBbNDMuMjYxNTMxMDAyMDY1NDEsIC0yLjkxNTI3NDI2NzU0NDQ0NjddLCBbNDMuMjY0OTAwMjczODQ1NDYsIC0yLjkxODMzNTczMjIwMDI2MDhdLCBbNDMuMjY0OTgyMjYxMjg4NzUsIC0yLjkyMjQ3NjQ3MDc1MDI1OTddLCBbNDMuMjYyODQ1MTIxMTIyMTA1LCAtMi45MjMwNTkxNDMzOTk4NjE2XSwgWzQzLjI1OTc5NTgzMzEyMzI5LCAtMi45MjQwODcyNzkzMTM5NDldLCBbNDMuMjYwODQ5MTQxNTY2OCwgLTIuOTI3OTE2ODI1MzQwMzIxNl0sIFs0My4yNTc1OTI5MzAxMTY3MiwgLTIuOTMzNTM0MjkwMDYwNDQxM10sIFs0My4yNTY1MTAzMDE5MzYwNDYsIC0yLjkzMTc1ODYwNDU1OTE5N10sIFs0My4yNTQzMjk5NTU4MTM5MywgLTIuOTMyMDgzNjU4NzI1NTQ5N10sIFs0My4yNTI3MjM2MjExOTg0NywgLTIuOTMyNjI0OTYwODA5MzMzXSwgWzQzLjI1MDUzMTEzMzU2ODU2NSwgLTIuOTI5OTA1MDQ0Nzk5ODQ5NF0sIFs0My4yNDkzNTQ4NTU0ODQxMzUsIC0yLjkyNzkwNzUzNDA0MTAzNjVdLCBbNDMuMjQ5NDE3NjEwMjcwODgsIC0yLjkyNjg5ODg5NzA1NTMxMDVdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjOGRhMGNiIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjOGRhMGNiIiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMjFmZjgzYTEzZmRhNGM3MDllNmViOTkwMDEzNTA2OTMpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQ0MWNmZTJhODkxODRiZWU5NmY5NTYzNmRmYzNjMWM5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xODk5Y2ZlMGM1NDk0Y2UyYTM1MGExOTQ5ZmEyZTRmNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTg5OWNmZTBjNTQ5NGNlMmEzNTBhMTk0OWZhMmU0ZjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MjA3PC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzAyMjwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gTWlyaWJpbGxhPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQwOTY1ODwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80NDFjZmUyYTg5MTg0YmVlOTZmOTU2MzZkZmMzYzFjOS5zZXRDb250ZW50KGh0bWxfMTg5OWNmZTBjNTQ5NGNlMmEzNTBhMTk0OWZhMmU0ZjYpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfYmM1N2E2MmU3YTUzNGVhN2JiZTk0MWY2YjdiMDU5ZjcuYmluZFBvcHVwKHBvcHVwXzQ0MWNmZTJhODkxODRiZWU5NmY5NTYzNmRmYzNjMWM5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF8xOWZjNWRkYTk4MDQ0OWU5YjQ5ZGFiZDlkZDAzODg5ZCA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfMzAyNGNiZjU5MDY3NDlhNmEzODcyNTRiNWQ3YTFhNzkgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNDk0MTc2MTAyNzA4OCwgLTIuOTI2ODk4ODk3MDU1MzEwNV0sIFs0My4yNTEyMTY4MzUyMzc3MDYsIC0yLjkyOTI2MzUzNzkwMDUxNTRdLCBbNDMuMjUyMzQ4MzYwNDI2NjQsIC0yLjkzMDc1OTE4OTMzNzA1MzNdLCBbNDMuMjUyMzQ4MzYwNDI2NjQsIC0yLjkzMDc1OTE4OTMzNzA1MzNdLCBbNDMuMjUyNzg2MjQwNjg5NTQ1LCAtMi45MzI1NTcwMDQ5NjE4OTY4XSwgWzQzLjI1Mjc4NjI0MDY4OTU0NSwgLTIuOTMyNTU3MDA0OTYxODk2OF0sIFs0My4yNTQ4Nzc5NDM1OTI0OSwgLTIuOTMzNDAzOTgzNjE1NTc1NF0sIFs0My4yNTYzNDM4Mjg1NTk3OSwgLTIuOTMzMjE1MTcyNTM4NzkzXSwgWzQzLjI1NDg3Nzk0MzU5MjQ5LCAtMi45MzM0MDM5ODM2MTU1NzU0XSwgWzQzLjI1NjM0MzgyODU1OTc5LCAtMi45MzMyMTUxNzI1Mzg3OTNdLCBbNDMuMjU3OTE0NjIxNjU1NzgsIC0yLjkzMjgyMjI2MjI4ODA5MV0sIFs0My4yNTc5MTQ2MjE2NTU3OCwgLTIuOTMyODIyMjYyMjg4MDkxXSwgWzQzLjI2MTQ0ODE2ODIwNTc5LCAtMi45MjcxOTAxNzQ2MzQ4Njg3XSwgWzQzLjI2MTQ0ODE2ODIwNTc5LCAtMi45MjcxOTAxNzQ2MzQ4Njg3XSwgWzQzLjI2NDA5OTUxMzUwMDAyLCAtMi45MjI1OTAxMTIwNzI1ODc3XSwgWzQzLjI2NDA5OTUxMzUwMDAyLCAtMi45MjI1OTAxMTIwNzI1ODc3XSwgWzQzLjI2NDc1MDM3MzU0NzA0NSwgLTIuOTE4NDEzODgwMDM1OTk4NF0sIFs0My4yNjA3ODUxNzgzMjU1NSwgLTIuOTE0ODA0NDU0MTk2MDE4M10sIFs0My4yNjQ3NTAzNzM1NDcwNDUsIC0yLjkxODQxMzg4MDAzNTk5ODRdLCBbNDMuMjYwNzg1MTc4MzI1NTUsIC0yLjkxNDgwNDQ1NDE5NjAxODNdLCBbNDMuMjU4OTgxNTcxMzU2NzA2LCAtMi45MTM4NjcwNTc0MjM3NDM3XSwgWzQzLjI1ODk4MTU3MTM1NjcwNiwgLTIuOTEzODY3MDU3NDIzNzQzN10sIFs0My4yNTcyMjk3MTY1ODA3LCAtMi45MDk4NDIxNzU0Mjk4OTM1XSwgWzQzLjI1Njg0MzQ0NzE3NjI5LCAtMi45MDY4MzE4NjAwMjk3NjgyXSwgWzQzLjI1NzIyOTcxNjU4MDcsIC0yLjkwOTg0MjE3NTQyOTg5MzVdLCBbNDMuMjU2ODQzNDQ3MTc2MjksIC0yLjkwNjgzMTg2MDAyOTc2ODJdLCBbNDMuMjU2NDY1NzMyNTQ3OTIsIC0yLjkwNDY5MjY3NTIxODMxMDRdLCBbNDMuMjU1MDQyMzY3NTM3ODMsIC0yLjkwMTEyNTg1MzExNDgwODVdLCBbNDMuMjU2NDY1NzMyNTQ3OTIsIC0yLjkwNDY5MjY3NTIxODMxMDRdLCBbNDMuMjUzMzYwMDMxNjQ4ODUsIC0yLjkwMzcyMzMzNzMzOTQ4M10sIFs0My4yNTUwNDIzNjc1Mzc4MywgLTIuOTAxMTI1ODUzMTE0ODA4NV0sIFs0My4yNTMzNjAwMzE2NDg4NSwgLTIuOTAzNzIzMzM3MzM5NDgzXSwgWzQzLjI1MDgxODY3NjMxNTg3LCAtMi45MDQ2MzYxNDY3ODA0OTk4XSwgWzQzLjI1MDgxODY3NjMxNTg3LCAtMi45MDQ2MzYxNDY3ODA0OTk4XV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2U3OGFjMyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAiI2U3OGFjMyIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJub0NsaXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLjAsICJzbW9vdGhGYWN0b3IiOiAxLjAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzE5ZmM1ZGRhOTgwNDQ5ZTliNDlkYWJkOWRkMDM4ODlkKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8zNTU3N2M0NjIwODU0ZTM5YWIyZTY5MjhhMWRhMGMzZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYTc3Y2MxNjE4NDIyNDk1ZWFiZWU4ZGI3NzUxMmM5ZGUgPSAkKGA8ZGl2IGlkPSJodG1sX2E3N2NjMTYxODQyMjQ5NWVhYmVlOGRiNzc1MTJjOWRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1ob3ZlciI+PHRyPjx0aD5kaXJlY3Rpb25faWQ8L3RoPjx0ZD48L3RkPjwvdHI+PHRyPjx0aD5yb3V0ZV9pZDwvdGg+PHRkPjIwODwvdGQ+PC90cj48dHI+PHRoPnNlcnZpY2VfaWQ8L3RoPjx0ZD4xPC90ZD48L3RyPjx0cj48dGg+c2hhcGVfaWQ8L3RoPjx0ZD5zaGFwZV8wNzY8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2hlYWRzaWduPC90aD48dGQ+IE1pcmliaWxsYTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaWQ8L3RoPjx0ZD40MzI0MjE8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMzU1NzdjNDYyMDg1NGUzOWFiMmU2OTI4YTFkYTBjM2Quc2V0Q29udGVudChodG1sX2E3N2NjMTYxODQyMjQ5NWVhYmVlOGRiNzc1MTJjOWRlKTsKICAgICAgICAKCiAgICAgICAgcG9seV9saW5lXzMwMjRjYmY1OTA2NzQ5YTZhMzg3MjU0YjVkN2ExYTc5LmJpbmRQb3B1cChwb3B1cF8zNTU3N2M0NjIwODU0ZTM5YWIyZTY5MjhhMWRhMGMzZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfZjJmYjRkNjk0NzZkNDM2ZDliOTllY2E0MjZmYTQ5MmMgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9seV9saW5lXzNjNzk2MTIyNDFiZDQ3ZjM4ZjFiODFiZWExNDc1OTE4ID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgIFtbNDMuMjU0NDU0NjIzMjMzMDksIC0yLjkxMDc1MzUzNzIxMjk3NV0sIFs0My4yNTQ5MTE4MjgxMzg4LCAtMi45MDcyMDg0MjI4MDkyNjY1XSwgWzQzLjI1NjEyMDkwOTAwNjExLCAtMi45MDQ0MTMzNTgzNjY5OTM4XSwgWzQzLjI1ODQ0MDgwNTQ5MjA2NCwgLTIuOTAyNzIyODkyNDc1MTc3XSwgWzQzLjI1OTMyODg5NzgzMzIyLCAtMi45MDAyNzkzMjcxNzE3MzI2XSwgWzQzLjI1NzcwODMxMzc2MTc0NiwgLTIuODk5MDQzOTY3Mjc2NDM0M10sIFs0My4yNTc5ODgxODU4NDc4NCwgLTIuODk4MDA2MzA4ODY0NTcxM10sIFs0My4yNTg5MDY5MDYyNjUxNzUsIC0yLjg5NzcwMjc2MDU1NzgwMjddLCBbNDMuMjU3Mzc5NTY3NDA4MTksIC0yLjg5NjUwNjExNjY5Mzc0NF0sIFs0My4yNTg3NTU2ODc0Mzc5MDUsIC0yLjg5NjcyMzgxMjEwMzYzMl0sIFs0My4yNjA0OTgxNTkzNDU1NjYsIC0yLjg5NzkwNzI2ODY4ODQ2NTddLCBbNDMuMjYwODQ5NjQ1MTI2MTksIC0yLjg5ODgyNzIzNDUyMzA0NV1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNhNmQ4NTQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiNhNmQ4NTQiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF9mMmZiNGQ2OTQ3NmQ0MzZkOWI5OWVjYTQyNmZhNDkyYyk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZmVlYWNmYTVhNDM5NDA3MGI5MThlOGY4OTJhNDNlNWUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzFkMDIyOGFkMmFmMTQzMDE4YzBiNGQxMjg1NGZkMGJhID0gJChgPGRpdiBpZD0iaHRtbF8xZDAyMjhhZDJhZjE0MzAxOGMwYjRkMTI4NTRmZDBiYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMDk8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDI4PC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBTYW50dXR4dTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaWQ8L3RoPjx0ZD40MTE2NTQ8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZmVlYWNmYTVhNDM5NDA3MGI5MThlOGY4OTJhNDNlNWUuc2V0Q29udGVudChodG1sXzFkMDIyOGFkMmFmMTQzMDE4YzBiNGQxMjg1NGZkMGJhKTsKICAgICAgICAKCiAgICAgICAgcG9seV9saW5lXzNjNzk2MTIyNDFiZDQ3ZjM4ZjFiODFiZWExNDc1OTE4LmJpbmRQb3B1cChwb3B1cF9mZWVhY2ZhNWE0Mzk0MDcwYjkxOGU4Zjg5MmE0M2U1ZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfYTBmZWZiNGM2MzY5NDMzODhkNTA1NTAzZWI1ZTkxMmUgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9seV9saW5lXzNlZGI3OWZiNzkyNjRiYjdiOTZmYWJiNjM4NWIxMjIwID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgIFtbNDMuMjYwODQ5NjQ1MTI2MTksIC0yLjg5ODgyNzIzNDUyMzA0NV0sIFs0My4yNTczNzg5NTM2OTg4NiwgLTIuODk5MTkxMTg4NjExMzkwNl0sIFs0My4yNTU1Njk5NTcxOTY0LCAtMi45MDA3NzU1NjU3MTRdLCBbNDMuMjUzMDI2ODQ1NDY0NTc1LCAtMi45MDIyMTE4NzYxNjUyMTldLCBbNDMuMjUwMzM2NDEwMTcwNzQ2LCAtMi45MDM2NzE5MzE3NDkyOTA3XSwgWzQzLjI0OTU1NjIyNTk1MDgxLCAtMi45MDg0MDE2MDAwMTYwNzhdLCBbNDMuMjUxNjU4NzQ5Njc1NzIsIC0yLjkxMDU4ODI5MjA0OTU2OTZdLCBbNDMuMjU0NDU0NjIzMjMzMDksIC0yLjkxMDc1MzUzNzIxMjk3NV1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNmZmQ5MmYiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiNmZmQ5MmYiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF9hMGZlZmI0YzYzNjk0MzM4OGQ1MDU1MDNlYjVlOTEyZSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjhkOTVlYTc0MTQzNDFiNWI5NGU1OGQ1OTg1ZThkNzIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzYwYWNhM2FjN2E5NTQ3YzY4ODg1Y2JhNTE0YzZlZTJmID0gJChgPGRpdiBpZD0iaHRtbF82MGFjYTNhYzdhOTU0N2M2ODg4NWNiYTUxNGM2ZWUyZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMTA8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDIxPC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBTYW50dXR4dTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaWQ8L3RoPjx0ZD40MTE3ODA8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZjhkOTVlYTc0MTQzNDFiNWI5NGU1OGQ1OTg1ZThkNzIuc2V0Q29udGVudChodG1sXzYwYWNhM2FjN2E5NTQ3YzY4ODg1Y2JhNTE0YzZlZTJmKTsKICAgICAgICAKCiAgICAgICAgcG9seV9saW5lXzNlZGI3OWZiNzkyNjRiYjdiOTZmYWJiNjM4NWIxMjIwLmJpbmRQb3B1cChwb3B1cF9mOGQ5NWVhNzQxNDM0MWI1Yjk0ZTU4ZDU5ODVlOGQ3MikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfYjY2Yjc3MjBlZTc1NGRlYzkyYjk1MGY1YWYwNjEyZTkgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9seV9saW5lXzlmOTQxNWUyZTFhMzRmNzRiZDg0ZDcwZTliMTA1MmQ3ID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgIFtbNDMuMjQwOTc3MzUxNTI5Mjk1LCAtMi45MjE0NjQzMDE0OTg4NzQ2XSwgWzQzLjI0NDE5OTUyMzgzNjkyNiwgLTIuOTE3MzY5NDU0NzA4MjIzNF0sIFs0My4yNDY0NzIzMzI4MzIzMjYsIC0yLjkwOTIyOTQ0MjM1NDMyOV0sIFs0My4yNDY4MjY5MDAzOTkyNTYsIC0yLjkxMTMzMjg3ODgwMTkxMDZdLCBbNDMuMjQ4NDUwNjQzMTEyNjc2LCAtMi45MTI1NjgzNTEyNjgxMjhdLCBbNDMuMjUwNjc1Mjc2MTYyODIsIC0yLjkxMTg0MzAzNjE4NzE5N10sIFs0My4yNTA5OTk2NTM4Nzk1NywgLTIuOTE0NzIxMzI2NTg0MDkwNl0sIFs0My4yNDk5OTIwNjU1MTM2MywgLTIuOTE3NDc4MjU3MTU3MDY4NV0sIFs0My4yNDg4ODQ0NzMwNDk2OCwgLTIuOTE5MzM3MDM0NDkzNTA5NV0sIFs0My4yNTE1MzEzNzUyNzYxLCAtMi45MjE0MTQ0NDUyNTE1MDY3XSwgWzQzLjI1MzU5NjQ3MzY4ODQ3NSwgLTIuOTIxMjc0MDgwMTQxNTI5M10sIFs0My4yNTUwMzA2NTIxMjg3LCAtMi45MjIwMDE3MTkxMzEwNzY4XSwgWzQzLjI1NjU5NjMxNDgxMzM4NiwgLTIuOTI1NzA3OTA0NzA5NDU0NV0sIFs0My4yNTk3OTU4MzMxMjMyOSwgLTIuOTI0MDg3Mjc5MzEzOTQ5XSwgWzQzLjI2MTQ3ODg5MDA2MDk4NSwgLTIuOTI3ODI3ODU2ODUxMjg4OF0sIFs0My4yNjA3NDYwNTMzNzYwMjUsIC0yLjkyOTA0NTcwMzIyNDE0NF1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNlNWM0OTQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiNlNWM0OTQiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF9iNjZiNzcyMGVlNzU0ZGVjOTJiOTUwZjVhZjA2MTJlOSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYzNlZjcyM2U3OWUxNGRkNmEwMWY4MzJjODgwNDBlYzggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzlhMTlmYzc2NjBkZTRiMTg5YmFhM2E4YmViY2VhODE4ID0gJChgPGRpdiBpZD0iaHRtbF85YTE5ZmM3NjYwZGU0YjE4OWJhYTNhOGJlYmNlYTgxOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMTM8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDQwPC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBQbGF6YSBCaXJpYmlsYTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaWQ8L3RoPjx0ZD40MTU3Mzk8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzNlZjcyM2U3OWUxNGRkNmEwMWY4MzJjODgwNDBlYzguc2V0Q29udGVudChodG1sXzlhMTlmYzc2NjBkZTRiMTg5YmFhM2E4YmViY2VhODE4KTsKICAgICAgICAKCiAgICAgICAgcG9seV9saW5lXzlmOTQxNWUyZTFhMzRmNzRiZDg0ZDcwZTliMTA1MmQ3LmJpbmRQb3B1cChwb3B1cF9jM2VmNzIzZTc5ZTE0ZGQ2YTAxZjgzMmM4ODA0MGVjOCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfNGZmOTAzZmY1ODY4NDA4Y2ExM2VkNmUzYzVjNGM4OGIgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9seV9saW5lX2NlNDRlNTJiM2VlYzQ5MTE5ODk0MjdjNGYzYTQxYTZjID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgIFtbNDMuMjYwNzQ2MDUzMzc2MDI1LCAtMi45MjkwNDU3MDMyMjQxNDRdLCBbNDMuMjY0MDk5NTEzNTAwMDIsIC0yLjkyMjU5MDExMjA3MjU4NzddLCBbNDMuMjY0NzUwMzczNTQ3MDQ1LCAtMi45MTg0MTM4ODAwMzU5OTg0XSwgWzQzLjI2MTQxODI2ODUxNzgxNSwgLTIuOTE1ODcwMTY3OTY0ODJdLCBbNDMuMjYwMDM3NTc0NDE3MDcsIC0yLjkxNzAxODUzNjcxNzEzMzVdLCBbNDMuMjU3NzU5NjIyMDMyMDgsIC0yLjkxNjgzNDYzOTMxNTgxMzhdLCBbNDMuMjU3MjU1MzU2ODE4ODksIC0yLjkxMzYxMzk4MDAzNTQzODRdLCBbNDMuMjU1OTgzNzc2MzU4Mzg0LCAtMi45MTMwOTgyNzY1NDY2ODk3XSwgWzQzLjI1NDY1NjQyOTgyMzg1LCAtMi45MTQ5NTM1OTIwOTA4NzNdLCBbNDMuMjU0NjIxMDI5ODU4NzU0LCAtMi45MTY5MTMwNDQ3NDI3NDE2XSwgWzQzLjI1MzEyMDUxMzU1ODkwNSwgLTIuOTE1NjE3ODU2ODE5MTIzOF0sIFs0My4yNTE3MTkyNjA2NTA3NiwgLTIuOTE0NjQxOTY4MjMxNjc2XSwgWzQzLjI0OTAzODIyNzgzNDUzLCAtMi45MTM1NTk3OTc5OTg1NjgzXSwgWzQzLjI0Njc4MTk5MjgzMjIyLCAtMi45MTE3NTE5NTY0MjI3NDhdLCBbNDMuMjQ0MjE5MDM1ODk2MjE1LCAtMi45MTc0MjEyMjczNTIwMjQ0XSwgWzQzLjI0NjUwNDA0ODU5Nzc5LCAtMi45MDkyODc2NjYyNzg1MDddLCBbNDMuMjQxNDc3ODYwODA2ODEsIC0yLjkyMTI3MDQ1MjUyMDgzNDRdLCBbNDMuMjQxOTY0MTgwNzA1NTE2LCAtMi45MjM2MzQ0NDg1Mzc5NzE1XSwgWzQzLjI0MzEyODU1MjU4OTk1LCAtMi45MjQ5MDc2NTYwNzM0MzhdLCBbNDMuMjQ0ODQxNzY1NjQ0MTcsIC0yLjkyNDk0MTk2NzMxMjMwMjddLCBbNDMuMjQyNDQ5NzE2MTk1NjIsIC0yLjkyNTU5NTc2NTIwMjA3MzddLCBbNDMuMjQxMjM0NTUxOTEyMzIsIC0yLjkyMzUxNzg0NzMyNjUxNzhdLCBbNDMuMjQwOTc3MzUxNTI5Mjk1LCAtMi45MjE0NjQzMDE0OTg4NzQ2XV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2IzYjNiMyIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAiI2IzYjNiMyIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJub0NsaXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLjAsICJzbW9vdGhGYWN0b3IiOiAxLjAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzRmZjkwM2ZmNTg2ODQwOGNhMTNlZDZlM2M1YzRjODhiKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jZGJkYzlhNjUyYzI0NDMzOTA2MzQ1OTNlMDViNGYxMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNjE1MTA4NDkyYjEwNDk4NmE0YzJkNGU3NzI4MTk1YTEgPSAkKGA8ZGl2IGlkPSJodG1sXzYxNTEwODQ5MmIxMDQ5ODZhNGMyZDRlNzcyODE5NWExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1ob3ZlciI+PHRyPjx0aD5kaXJlY3Rpb25faWQ8L3RoPjx0ZD48L3RkPjwvdHI+PHRyPjx0aD5yb3V0ZV9pZDwvdGg+PHRkPjIxNDwvdGQ+PC90cj48dHI+PHRoPnNlcnZpY2VfaWQ8L3RoPjx0ZD4xPC90ZD48L3RyPjx0cj48dGg+c2hhcGVfaWQ8L3RoPjx0ZD5zaGFwZV8wOTI8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2hlYWRzaWduPC90aD48dGQ+IFBsYXphIEJpcmliaWxhPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQxNTg3NTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jZGJkYzlhNjUyYzI0NDMzOTA2MzQ1OTNlMDViNGYxMC5zZXRDb250ZW50KGh0bWxfNjE1MTA4NDkyYjEwNDk4NmE0YzJkNGU3NzI4MTk1YTEpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfY2U0NGU1MmIzZWVjNDkxMTk4OTQyN2M0ZjNhNDFhNmMuYmluZFBvcHVwKHBvcHVwX2NkYmRjOWE2NTJjMjQ0MzM5MDYzNDU5M2UwNWI0ZjEwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF8xYzk3MDIzYWRmMTI0YjRjOWJmYjMyN2RkNGQwOTdkYiA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfNjkxMzcyYTAyY2JhNGZkZThlMjJjMjI5ZDM0YjA4OGQgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNjAzMjkxNDQ2Nzg0NjUsIC0yLjkwNDc0NzE0MjMxMjczMl0sIFs0My4yNTg0NDA4MDU0OTIwNjQsIC0yLjkwMjcyMjg5MjQ3NTE3N10sIFs0My4yNTkzMjg4OTc4MzMyMiwgLTIuOTAwMjc5MzI3MTcxNzMyNl0sIFs0My4yNTczNzg5NTM2OTg4NiwgLTIuODk5MTkxMTg4NjExMzkwNl0sIFs0My4yNTU1Njk5NTcxOTY0LCAtMi45MDA3NzU1NjU3MTRdLCBbNDMuMjUzMDI2ODQ1NDY0NTc1LCAtMi45MDIyMTE4NzYxNjUyMTldLCBbNDMuMjUwMzM2NDEwMTcwNzQ2LCAtMi45MDM2NzE5MzE3NDkyOTA3XSwgWzQzLjI0OTU1NjIyNTk1MDgxLCAtMi45MDg0MDE2MDAwMTYwNzhdLCBbNDMuMjUxNjU4NzQ5Njc1NzIsIC0yLjkxMDU4ODI5MjA0OTU2OTZdLCBbNDMuMjU0NDU0NjIzMjMzMDksIC0yLjkxMDc1MzUzNzIxMjk3NV1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM2NmMyYTUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiM2NmMyYTUiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8xYzk3MDIzYWRmMTI0YjRjOWJmYjMyN2RkNGQwOTdkYik7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNDgwNjRkZDVjMjYzNDgzYzg1MGIwNjYyYjc0OGMxN2UgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzg4MWNhYzYxZGQ3NDQ0YmM5NjUwYmEyNzM5Y2QzZjZlID0gJChgPGRpdiBpZD0iaHRtbF84ODFjYWM2MWRkNzQ0NGJjOTY1MGJhMjczOWNkM2Y2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMTU8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDIzPC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBTYW50dXR4dTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaWQ8L3RoPjx0ZD40MTYyODk8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNDgwNjRkZDVjMjYzNDgzYzg1MGIwNjYyYjc0OGMxN2Uuc2V0Q29udGVudChodG1sXzg4MWNhYzYxZGQ3NDQ0YmM5NjUwYmEyNzM5Y2QzZjZlKTsKICAgICAgICAKCiAgICAgICAgcG9seV9saW5lXzY5MTM3MmEwMmNiYTRmZGU4ZTIyYzIyOWQzNGIwODhkLmJpbmRQb3B1cChwb3B1cF80ODA2NGRkNWMyNjM0ODNjODUwYjA2NjJiNzQ4YzE3ZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfMWNjMTg4OGQ2YTA3NGU5Y2JhMjlhMDhmZjRlOThhM2QgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9seV9saW5lXzM0YTRhMzRkZmMyYjQyOTVhZmY0ZTVhYTZkZjVmZTNhID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgIFtbNDMuMjU0NDU0NjIzMjMzMDksIC0yLjkxMDc1MzUzNzIxMjk3NV0sIFs0My4yNTQ5MTE4MjgxMzg4LCAtMi45MDcyMDg0MjI4MDkyNjY1XSwgWzQzLjI1NjEyMDkwOTAwNjExLCAtMi45MDQ0MTMzNTgzNjY5OTM4XSwgWzQzLjI1NTUxMDAyNzQ0Mzk2LCAtMi45MDA2NDA3NTc1NDY2NTZdLCBbNDMuMjU3MzMxNzcwODg5OCwgLTIuODk5MDY0NTc3OTQ5NTQ5Nl0sIFs0My4yNTk2OTU3ODExMzIzNjUsIC0yLjkwMDQ3MTcwOTIxMjI0NDVdLCBbNDMuMjYxMzQ4ODI4Mzc0MTQ2LCAtMi45MDAzNzU3NTExMjk5NF0sIFs0My4yNjA2MDYzMzU0MjQwNywgLTIuOTAxMjQ1MTE0MjQwNjQ5XSwgWzQzLjI2MDM2NzMwNjQyNDEzLCAtMi45MDMzMDQ2NzI4ODM5MTNdLCBbNDMuMjYxNTIyMzg1MTkyNDY0LCAtMi45MDQ4MjU0NTA4MDE1MTU0XSwgWzQzLjI2MDMyOTE0NDY3ODQ2NSwgLTIuOTA0NzQ3MTQyMzEyNzMyXV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2ZjOGQ2MiIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAiI2ZjOGQ2MiIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJub0NsaXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLjAsICJzbW9vdGhGYWN0b3IiOiAxLjAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzFjYzE4ODhkNmEwNzRlOWNiYTI5YTA4ZmY0ZTk4YTNkKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81MjI0NDhlYWQ5NTU0NjU4YjhlYzgzMGIyYWJlNWNjNSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOGJhODM4ZGUzNmUzNDZkNWIwZjg5YWZmZjQzN2M1YjcgPSAkKGA8ZGl2IGlkPSJodG1sXzhiYTgzOGRlMzZlMzQ2ZDViMGY4OWFmZmY0MzdjNWI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1ob3ZlciI+PHRyPjx0aD5kaXJlY3Rpb25faWQ8L3RoPjx0ZD48L3RkPjwvdHI+PHRyPjx0aD5yb3V0ZV9pZDwvdGg+PHRkPjIxNjwvdGQ+PC90cj48dHI+PHRoPnNlcnZpY2VfaWQ8L3RoPjx0ZD4xPC90ZD48L3RyPjx0cj48dGg+c2hhcGVfaWQ8L3RoPjx0ZD5zaGFwZV8wMjk8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2hlYWRzaWduPC90aD48dGQ+IFNhbnR1dHh1PC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQxNjQxNjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF81MjI0NDhlYWQ5NTU0NjU4YjhlYzgzMGIyYWJlNWNjNS5zZXRDb250ZW50KGh0bWxfOGJhODM4ZGUzNmUzNDZkNWIwZjg5YWZmZjQzN2M1YjcpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfMzRhNGEzNGRmYzJiNDI5NWFmZjRlNWFhNmRmNWZlM2EuYmluZFBvcHVwKHBvcHVwXzUyMjQ0OGVhZDk1NTQ2NThiOGVjODMwYjJhYmU1Y2M1KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF84NTcxZjQ5NWQyMTU0ZDJiODUxNjYzZTA0MGQ5OTEyNiA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfMmYzZDM0MDMzZDYzNDUzYmJmNDU5MDk1NzlmNTZiMWUgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNTE2NTg3NDk2NzU3MiwgLTIuOTEwNTg4MjkyMDQ5NTY5Nl0sIFs0My4yNTQ5ODk3ODA3OTExNTYsIC0yLjkxMTkzNDM0NzczMDkwMzZdLCBbNDMuMjU3NTEyNjY0MDI5MDY1LCAtMi45MTM0MDUzMjM4MTQ1NzZdLCBbNDMuMjU3ODM4OTA5NjIzNDIsIC0yLjkxNjc4MjMxNTkzNjA3NzddLCBbNDMuMjYwMzA2MzA3NjY1MiwgLTIuOTE2NjY4NTUyMzUwMzE3XSwgWzQzLjI2MTUzMTAwMjA2NTQxLCAtMi45MTUyNzQyNjc1NDQ0NDY3XSwgWzQzLjI2NTUxMzY0MzEwODQ2LCAtMi45MTY2ODMxMDkwNzgxNjhdLCBbNDMuMjY3ODMwMzcwMzg5NTc1LCAtMi45MTg0MzQ4NTAxODE5OTE0XSwgWzQzLjI2OTgzMTM3MTQ4NDkyNiwgLTIuOTIyNTcyODQ1NTE3NTA3N10sIFs0My4yNzAwODM4OTQ3OTAyMDQsIC0yLjkyNjAwMzU2MjEyMjg3MzNdLCBbNDMuMjY2MDg0OTA3NjE1OTIsIC0yLjkzMzcwNTgzNDYwNzY2NjNdLCBbNDMuMjYzMjg5NzI1MzM5NTUsIC0yLjkzNTk4NzI3NDM0NzM4MzRdLCBbNDMuMjYzNjQ0NjIyMzk5NTQ2LCAtMi45MzkyODYyNDU4MTI0MTA1XSwgWzQzLjI2MTE3MTIxMjU0MzEzLCAtMi45NDAyNzE5NzM5ODg0ODY0XSwgWzQzLjI1ODM1ODk1MTY3NjA0NCwgLTIuOTQxNDExMzc4Nzc1NjMxN10sIFs0My4yNTc3MTg2NDA0NDI0LCAtMi45NDI3MzgwMDIzMjY5OTQ1XSwgWzQzLjI1ODAwMDE5Mjc4OTYsIC0yLjk0OTA1MjUyOTEyOTYyMTVdLCBbNDMuMjYwMTAxMTU2ODc4MTgsIC0yLjk1Mjk3MTQ5Mzc1NTIwOTRdLCBbNDMuMjU4NDY1MTYzNjMwMTQsIC0yLjk1MTkyMjgzNDk4NjgxNjddLCBbNDMuMjU1ODc4Njg5MzQ1MjcsIC0yLjk1Mzg5NjgzODEyNzMwMTZdLCBbNDMuMjU4MDM5NDUwNjAxMzk1LCAtMi45NTQxNTI3MjY5MjA1MjNdLCBbNDMuMjU4NDA3MTA1NDcyMjMsIC0yLjk1NTgzOTU2OTc1Njc3Nl0sIFs0My4yNTcwMjEyNTE2NjkxMSwgLTIuOTU1MTM0OTg3NDkyMzIyXV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzhkYTBjYiIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAiIzhkYTBjYiIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJub0NsaXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLjAsICJzbW9vdGhGYWN0b3IiOiAxLjAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1NzFmNDk1ZDIxNTRkMmI4NTE2NjNlMDQwZDk5MTI2KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9iNTE2ZmE2ZDgxZGU0NGRhYjlhMmRhNDVjMTY3ZjZjMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYWIwMDFjYmU4ODRhNDdhYmJjNzg4NzY3NGMwYTQ3NTYgPSAkKGA8ZGl2IGlkPSJodG1sX2FiMDAxY2JlODg0YTQ3YWJiYzc4ODc2NzRjMGE0NzU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1ob3ZlciI+PHRyPjx0aD5kaXJlY3Rpb25faWQ8L3RoPjx0ZD48L3RkPjwvdHI+PHRyPjx0aD5yb3V0ZV9pZDwvdGg+PHRkPjIxNzwvdGQ+PC90cj48dHI+PHRoPnNlcnZpY2VfaWQ8L3RoPjx0ZD4xPC90ZD48L3RyPjx0cj48dGg+c2hhcGVfaWQ8L3RoPjx0ZD5zaGFwZV8wMzE8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2hlYWRzaWduPC90aD48dGQ+IExlemVhZ2E8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDE0MDY3PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2I1MTZmYTZkODFkZTQ0ZGFiOWEyZGE0NWMxNjdmNmMwLnNldENvbnRlbnQoaHRtbF9hYjAwMWNiZTg4NGE0N2FiYmM3ODg3Njc0YzBhNDc1Nik7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV8yZjNkMzQwMzNkNjM0NTNiYmY0NTkwOTU3OWY1NmIxZS5iaW5kUG9wdXAocG9wdXBfYjUxNmZhNmQ4MWRlNDRkYWI5YTJkYTQ1YzE2N2Y2YzApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzE2MjFlNzNmMDNiZTRjYmI4ODE0NjU1YTcxZDJiZTNjID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV9iMDVlYzY0NTdhZGU0YTdlYjIzZTExNWQ5YzAwNjU3OSA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI1NzAyMTI1MTY2OTExLCAtMi45NTUxMzQ5ODc0OTIzMjJdLCBbNDMuMjU4MzU3ODU4MjYyOTEsIC0yLjk1NTc1NzA2MTA5MjcwNzVdLCBbNDMuMjU3NzcxOTA2MzQ3MDEsIC0yLjk1NDA0MzUxMTUwMzQwMzZdLCBbNDMuMjU1ODMwNjEzNzQ5NDk1LCAtMi45NTM4MzkyODExMzgwNjQzXSwgWzQzLjI1ODYyNjY4NzY5OTEwNiwgLTIuOTUxOTM2ODAyNTMzMzYzN10sIFs0My4yNTk0NjAwNDMzMDAxNSwgLTIuOTUyMjY5MTkzMzg1ODUzNF0sIFs0My4yNTc5NDQ4NTg2MzgwNywgLTIuOTQ5MDU1NDY4Njc2Mjg5M10sIFs0My4yNTc1ODc1Mzc3MDQxMDQsIC0yLjk0MjUyMzg1ODY3ODQzNV0sIFs0My4yNTg2MDM4NTgwMjkwMywgLTIuOTQxMjUyMTYyMTAzMTQ1Nl0sIFs0My4yNjE1OTE0MzkwNDA0MiwgLTIuOTQwMDMyNDUwMTkwNzU2XSwgWzQzLjI2MzYxNTE0NjM1MzI3NCwgLTIuOTM5MTg3MzcxODk2MTk5XSwgWzQzLjI2MzE2OTEyMzc4MDI4LCAtMi45MzYwNTIwMTI1MDU5Mzg2XSwgWzQzLjI2MzYyOTYzMTgzOTAzLCAtMi45MzQ1ODY4OTAxNjEyMzldLCBbNDMuMjY2NjkxMjk5MTA1NjIsIC0yLjkzMzMzOTk3MzkzMDE2ODddLCBbNDMuMjY5NjY4NjEzMzgzNzMsIC0yLjkyMjQ3OTIxNDQ3ODM3NjRdLCBbNDMuMjY3NjQxNDEwMjQ3MDYsIC0yLjkxODQyNjYyNDc1MTk5Ml0sIFs0My4yNjU1MzA4MjE4MTc2NTYsIC0yLjkxNjg3ODA2NzMyMDYyOF0sIFs0My4yNjE0MTgyNjg1MTc4MTUsIC0yLjkxNTg3MDE2Nzk2NDgyXSwgWzQzLjI2MDAzNzU3NDQxNzA3LCAtMi45MTcwMTg1MzY3MTcxMzM1XSwgWzQzLjI1Nzc1OTYyMjAzMjA4LCAtMi45MTY4MzQ2MzkzMTU4MTM4XSwgWzQzLjI1NzI1NTM1NjgxODg5LCAtMi45MTM2MTM5ODAwMzU0Mzg0XSwgWzQzLjI1NTk4Mzc3NjM1ODM4NCwgLTIuOTEzMDk4Mjc2NTQ2Njg5N10sIFs0My4yNTQ2NTY0Mjk4MjM4NSwgLTIuOTE0OTUzNTkyMDkwODczXSwgWzQzLjI1NDYyMTAyOTg1ODc1NCwgLTIuOTE2OTEzMDQ0NzQyNzQxNl0sIFs0My4yNTMxMjA1MTM1NTg5MDUsIC0yLjkxNTYxNzg1NjgxOTEyMzhdLCBbNDMuMjUxNzE5MjYwNjUwNzYsIC0yLjkxNDY0MTk2ODIzMTY3Nl0sIFs0My4yNTE2NTg3NDk2NzU3MiwgLTIuOTEwNTg4MjkyMDQ5NTY5Nl1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNlNzhhYzMiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiNlNzhhYzMiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8xNjIxZTczZjAzYmU0Y2JiODgxNDY1NWE3MWQyYmUzYyk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOWRlYzFkOTVhODY5NGU3ZmJhYjZiZjY5NTdmYjVkNTEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2NhNzY1NTliYWQ1ZDQ5YTY5NTU5ZjhmNzU5YTI5OWUwID0gJChgPGRpdiBpZD0iaHRtbF9jYTc2NTU5YmFkNWQ0OWE2OTU1OWY4Zjc1OWEyOTllMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMTg8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMTE4PC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBMZXplYWdhPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQxNDE3ODwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85ZGVjMWQ5NWE4Njk0ZTdmYmFiNmJmNjk1N2ZiNWQ1MS5zZXRDb250ZW50KGh0bWxfY2E3NjU1OWJhZDVkNDlhNjk1NTlmOGY3NTlhMjk5ZTApOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfYjA1ZWM2NDU3YWRlNGE3ZWIyM2UxMTVkOWMwMDY1NzkuYmluZFBvcHVwKHBvcHVwXzlkZWMxZDk1YTg2OTRlN2ZiYWI2YmY2OTU3ZmI1ZDUxKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF82M2Q3ZWViY2NjZDk0OGI0OTZlMjg2ODIyNzA0ZGUzMyA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfMDJiYTIwYThjNWU4NGYxZmJiODlmZGExMjRjODczMWEgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yMjcxMzQ4NzEzMjM0NSwgLTIuOTE2ODMzODY1MTY4MjQxXSwgWzQzLjIyNjM3MDk4ODI1NDUxLCAtMi45MTM5NTI0ODI4MDUyMDQ0XSwgWzQzLjIzMjc4MzM2MTYwNzI4LCAtMi45MTQ0NjY5NzI2MDA4OTQ1XSwgWzQzLjIzOTQzOTU4NzY0MzU3LCAtMi45MTgxMzMwNjM4NjY5MjY1XSwgWzQzLjI0MTQ3Nzg2MDgwNjgxLCAtMi45MjEyNzA0NTI1MjA4MzQ0XSwgWzQzLjI0MTk2NDE4MDcwNTUxNiwgLTIuOTIzNjM0NDQ4NTM3OTcxNV0sIFs0My4yNDI0NDk3MTYxOTU2MiwgLTIuOTI1NTk1NzY1MjAyMDczN10sIFs0My4yNDEyMzQ1NTE5MTIzMiwgLTIuOTIzNTE3ODQ3MzI2NTE3OF0sIFs0My4yNDA5NzczNTE1MjkyOTUsIC0yLjkyMTQ2NDMwMTQ5ODg3NDZdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjYTZkODU0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjYTZkODU0IiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNjNkN2VlYmNjY2Q5NDhiNDk2ZTI4NjgyMjcwNGRlMzMpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2IzMDczOTE2MmExNDRlZTViYjgzYjAzZjZlMGQ0MTk2ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85YzIzYWIzODNiYTI0MTJlOGNkYTkwOTAzZjE5N2I5ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfOWMyM2FiMzgzYmEyNDEyZThjZGE5MDkwM2YxOTdiOWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MjE5PC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzAzOTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gTGEgUGXDsWE8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDA3ODQyPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2IzMDczOTE2MmExNDRlZTViYjgzYjAzZjZlMGQ0MTk2LnNldENvbnRlbnQoaHRtbF85YzIzYWIzODNiYTI0MTJlOGNkYTkwOTAzZjE5N2I5Zik7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV8wMmJhMjBhOGM1ZTg0ZjFmYmI4OWZkYTEyNGM4NzMxYS5iaW5kUG9wdXAocG9wdXBfYjMwNzM5MTYyYTE0NGVlNWJiODNiMDNmNmUwZDQxOTYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwX2Q4OWQzODRkNjU0NzQ4NjI4YzI2NDU5YWI2ZWE4NDQxID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV9iNDI1MDNmNGI0YWY0NmRkYTJlM2Y4YzVmMDZhZTJmZiA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI0MDk3NzM1MTUyOTI5NSwgLTIuOTIxNDY0MzAxNDk4ODc0Nl0sIFs0My4yMzk0Mzk1ODc2NDM1NywgLTIuOTE4MTMzMDYzODY2OTI2NV0sIFs0My4yMzI2NDkyNDA5MTQ2NzUsIC0yLjkxNDUzMzgxMzU2MjY0MTddLCBbNDMuMjI2NDE3NjEzNTIyMjE2LCAtMi45MTM5MTEzNjcyNzAyNzY2XSwgWzQzLjIyNzEzNDg3MTMyMzQ1LCAtMi45MTY4MzM4NjUxNjgyNDFdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjZmZkOTJmIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjZmZkOTJmIiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg5ZDM4NGQ2NTQ3NDg2MjhjMjY0NTlhYjZlYTg0NDEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzhhMDE4NjIyN2MxODQ1MWZhYWE1MmFmZGI5OWFjOGFkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8yMDllNDFiOGFlMWY0ZjY1YjcyNzcyMTMyZGY0MTVlZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjA5ZTQxYjhhZTFmNGY2NWI3Mjc3MjEzMmRmNDE1ZWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MjIwPC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzA0MzwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gTGEgUGXDsWE8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDA3OTYzPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzhhMDE4NjIyN2MxODQ1MWZhYWE1MmFmZGI5OWFjOGFkLnNldENvbnRlbnQoaHRtbF8yMDllNDFiOGFlMWY0ZjY1YjcyNzcyMTMyZGY0MTVlZCk7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV9iNDI1MDNmNGI0YWY0NmRkYTJlM2Y4YzVmMDZhZTJmZi5iaW5kUG9wdXAocG9wdXBfOGEwMTg2MjI3YzE4NDUxZmFhYTUyYWZkYjk5YWM4YWQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzdhMmE3NzAwYzQwZjQ2ODBhZDkyZGUzNDQ3ZWZkMDY0ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV9kOWU4OTI2ZmRmZDE0ZTY5YmU4ZmI2OTU3ZTJhZWExZSA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI2NDkyNjE2NTM0MTMzNiwgLTIuOTQ0MDU5OTcwOTQyMjkwOF0sIFs0My4yNjQxNDc0NjkxODg3ODUsIC0yLjk0MDUxOTU0MDQ4MTQ2N10sIFs0My4yNjMzNDgwMTE1NDI3NCwgLTIuOTM2ODY5MjcxMDMwMjYzN10sIFs0My4yNjI2OTA3NjE5NzcwMywgLTIuOTMzNzUwOTk2NDMxNTU5XSwgWzQzLjI2MTUyOTk0NjQwMDE3NCwgLTIuOTI4NDc2NTgwODg0NjUxM10sIFs0My4yNTk1NjI0NjM3MTkxNSwgLTIuOTI0MDM3ODgxMTk4MDEwM10sIFs0My4yNTcwOTAzNDI1MzMwNzUsIC0yLjkyNzEyOTI5NTA3NzkyMzddLCBbNDMuMjU0NzczMDc3NzUxNTIsIC0yLjkyNjc0Mzg5NDM0MzA3NDRdLCBbNDMuMjU0MDg4NDc5NDI0MTA1LCAtMi45MjUwODAzNjg4NDA4NzA2XSwgWzQzLjI1MzcyODkzMTM2NTM0NSwgLTIuOTIzMDc5MTU5OTg4NjU2NV0sIFs0My4yNTIzNDM0MDMwNTMzMywgLTIuOTIzMDc5Mzg4NTUwNzk0XSwgWzQzLjI1MTAzNDU1MTYxOTQ3LCAtMi45MjI4ODk4MDAzNzI0NTE1XSwgWzQzLjI0OTUzMjkzODk2ODM4LCAtMi45MjE4NDQyMzIwNjM2Nzg2XSwgWzQzLjI0NTcxOTk5NjczMzg1NCwgLTIuOTIyNTI5NDM3NjMyNjA2NV0sIFs0My4yNDQ4NDE3NjU2NDQxNywgLTIuOTI0OTQxOTY3MzEyMzAyN10sIFs0My4yNDI0NDk3MTYxOTU2MiwgLTIuOTI1NTk1NzY1MjAyMDczN10sIFs0My4yNDEyMzQ1NTE5MTIzMiwgLTIuOTIzNTE3ODQ3MzI2NTE3OF0sIFs0My4yNDA5NzczNTE1MjkyOTUsIC0yLjkyMTQ2NDMwMTQ5ODg3NDZdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjZTVjNDk0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjZTVjNDk0IiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfN2EyYTc3MDBjNDBmNDY4MGFkOTJkZTM0NDdlZmQwNjQpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2U0MWQwZTZiNmQ3YTRiNDdiY2U4OTczYzdjOWM2YTRlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8yNjg0OTJmZDU5ZDA0NTljOTk5MmQ4YWUwYjk0MTZlMiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjY4NDkyZmQ1OWQwNDU5Yzk5OTJkOGFlMGI5NDE2ZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MjIxPC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzEwMzwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gSmVzdXNlbiBCaWhvdHphPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQxMDY0MzwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9lNDFkMGU2YjZkN2E0YjQ3YmNlODk3M2M3YzljNmE0ZS5zZXRDb250ZW50KGh0bWxfMjY4NDkyZmQ1OWQwNDU5Yzk5OTJkOGFlMGI5NDE2ZTIpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfZDllODkyNmZkZmQxNGU2OWJlOGZiNjk1N2UyYWVhMWUuYmluZFBvcHVwKHBvcHVwX2U0MWQwZTZiNmQ3YTRiNDdiY2U4OTczYzdjOWM2YTRlKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF9hNTlmODgzM2ExOWQ0MTgwOWRjYjA5ODMxNDY2ZTY1MCA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfNjk5MzBlMDNjNTQyNGE5Nzk4ZDdhOTc5MjZjOTVmMGIgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNDA5NzczNTE1MjkyOTUsIC0yLjkyMTQ2NDMwMTQ5ODg3NDZdLCBbNDMuMjQxNDc3ODYwODA2ODEsIC0yLjkyMTI3MDQ1MjUyMDgzNDRdLCBbNDMuMjQxOTY0MTgwNzA1NTE2LCAtMi45MjM2MzQ0NDg1Mzc5NzE1XSwgWzQzLjI0MzEyODU1MjU4OTk1LCAtMi45MjQ5MDc2NTYwNzM0MzhdLCBbNDMuMjQ0ODcxODkyMDExODcsIC0yLjkyNDI4MzA3NTAxMjY3NV0sIFs0My4yNDYxMDA1MTM4OTA3NSwgLTIuOTIxNzEzNzM3Nzg2ODA0XSwgWzQzLjI0OTAyMjM3MjYxNzU5NiwgLTIuOTIxNDQyMjM1MTY0NjU2NV0sIFs0My4yNTIwMDUyODE0NDM3OCwgLTIuOTIyNzk0OTU0MTY0MzU3NF0sIFs0My4yNTQwMjYwODY0NTY0NiwgLTIuOTIzMTczNDMyODk2NDA2NV0sIFs0My4yNTY1OTYzMTQ4MTMzODYsIC0yLjkyNTcwNzkwNDcwOTQ1NDVdLCBbNDMuMjU5Nzk1ODMzMTIzMjksIC0yLjkyNDA4NzI3OTMxMzk0OV0sIFs0My4yNjE3MzI1ODgyNjEyOCwgLTIuOTI4OTY3MDQxMzg1NjQ4M10sIFs0My4yNjI3MDk4NjczOTA5NywgLTIuOTMzNDU3MjM4NzAyMTU3NF0sIFs0My4yNjMyODk3MjUzMzk1NSwgLTIuOTM1OTg3Mjc0MzQ3MzgzNF0sIFs0My4yNjQyMTM1ODUxMzQ5MywgLTIuOTQwMTk4OTQ2ODMyNDY0NV0sIFs0My4yNjQ5MjYxNjUzNDEzMzYsIC0yLjk0NDA1OTk3MDk0MjI5MDhdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjYjNiM2IzIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjYjNiM2IzIiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTU5Zjg4MzNhMTlkNDE4MDlkY2IwOTgzMTQ2NmU2NTApOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzlkMDMxMjM2YWZkYzRiNTI5M2FiMmI5NzQwY2Y1MjQyID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zYzI3ZjFiZTFiODU0NTdhOTkwMjlkMjI0MDZkODQ3OSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2MyN2YxYmUxYjg1NDU3YTk5MDI5ZDIyNDA2ZDg0NzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MjIyPC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzA0MTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gSmVzdXNlbiBCaWhvdHphPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQxMDg2OTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85ZDAzMTIzNmFmZGM0YjUyOTNhYjJiOTc0MGNmNTI0Mi5zZXRDb250ZW50KGh0bWxfM2MyN2YxYmUxYjg1NDU3YTk5MDI5ZDIyNDA2ZDg0NzkpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfNjk5MzBlMDNjNTQyNGE5Nzk4ZDdhOTc5MjZjOTVmMGIuYmluZFBvcHVwKHBvcHVwXzlkMDMxMjM2YWZkYzRiNTI5M2FiMmI5NzQwY2Y1MjQyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF82ZjA1MzFhODdhZmQ0M2Y2OTRhNDZjYTU0M2EyNDVjMCA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfMTcyN2Y2NDMwMGNlNGMzMDkzNDNiYmI3YTUxYjU1MmEgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNjAxMDExNTY4NzgxOCwgLTIuOTUyOTcxNDkzNzU1MjA5NF0sIFs0My4yNTc5NDQ4NTg2MzgwNywgLTIuOTQ5MDU1NDY4Njc2Mjg5M10sIFs0My4yNTc0NzUwOTIyNzMzNSwgLTIuOTQ2MDc0MjY0Njc0MjEzXSwgWzQzLjI1NDM2NDAxMjk1OTA1LCAtMi45NDQ3MTg1MDE1ODgxMTE0XSwgWzQzLjI1MjUyNzcxMjAzODIxLCAtMi45NDUwNzQyMDE2MjcwMDddLCBbNDMuMjU0MzMwODMwMzM3NCwgLTIuOTQ0NTk0Mzk5OTQxNzU4M10sIFs0My4yNTQwMzI3Nzk3NzczMDUsIC0yLjk0MjU3ODc4MzY1NzE3MTddLCBbNDMuMjUyMDE5NDU4MDg3Mzk2LCAtMi45Mzg3MjU5MDk5MDY1NTJdLCBbNDMuMjUwODE0NDg1NDM1OTYsIC0yLjkzNTc0NjM2NTE1MTA4OF0sIFs0My4yNDk2Mzk4OTk4MjIwNywgLTIuOTMzNzYxODU0NzQ5MTc5XSwgWzQzLjI0ODMwNDM3NTc3NDYxNiwgLTIuOTMzMjA1Nzc1MDM0NDUzNl0sIFs0My4yNDc2NjAyNDU2NTU4NDQsIC0yLjkzMTYxOTEzMzExNTE1N10sIFs0My4yNDY4OTA4ODgzNzI3NzUsIC0yLjkyOTc1NDUxMzkxNzgzODVdLCBbNDMuMjQ4NzUyNTM2NTc5NDcsIC0yLjkyODA1ODQzMTUwOTkxOF0sIFs0My4yNDk0MTc2MTAyNzA4OCwgLTIuOTI2ODk4ODk3MDU1MzEwNV0sIFs0My4yNTEyMTY4MzUyMzc3MDYsIC0yLjkyOTI2MzUzNzkwMDUxNTRdLCBbNDMuMjUyMzQ4MzYwNDI2NjQsIC0yLjkzMDc1OTE4OTMzNzA1MzNdLCBbNDMuMjUyNzg2MjQwNjg5NTQ1LCAtMi45MzI1NTcwMDQ5NjE4OTY4XV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzY2YzJhNSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAiIzY2YzJhNSIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJub0NsaXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLjAsICJzbW9vdGhGYWN0b3IiOiAxLjAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzZmMDUzMWE4N2FmZDQzZjY5NGE0NmNhNTQzYTI0NWMwKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82MDBiZDM1ZDA2ZWI0OTQ4OWQ1MTVlNzlmZWZhZDRmOCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzk3N2Y0YjdjOWZhNGQ5ZjkwNjQ1NjFiMzUyNzBiN2UgPSAkKGA8ZGl2IGlkPSJodG1sXzc5NzdmNGI3YzlmYTRkOWY5MDY0NTYxYjM1MjcwYjdlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1ob3ZlciI+PHRyPjx0aD5kaXJlY3Rpb25faWQ8L3RoPjx0ZD48L3RkPjwvdHI+PHRyPjx0aD5yb3V0ZV9pZDwvdGg+PHRkPjIyMzwvdGQ+PC90cj48dHI+PHRoPnNlcnZpY2VfaWQ8L3RoPjx0ZD4xPC90ZD48L3RyPjx0cj48dGg+c2hhcGVfaWQ8L3RoPjx0ZD5zaGFwZV8xMTU8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2hlYWRzaWduPC90aD48dGQ+IE9zcGl0YWxlYTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaWQ8L3RoPjx0ZD40MDc0Njk8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjAwYmQzNWQwNmViNDk0ODlkNTE1ZTc5ZmVmYWQ0Zjguc2V0Q29udGVudChodG1sXzc5NzdmNGI3YzlmYTRkOWY5MDY0NTYxYjM1MjcwYjdlKTsKICAgICAgICAKCiAgICAgICAgcG9seV9saW5lXzE3MjdmNjQzMDBjZTRjMzA5MzQzYmJiN2E1MWI1NTJhLmJpbmRQb3B1cChwb3B1cF82MDBiZDM1ZDA2ZWI0OTQ4OWQ1MTVlNzlmZWZhZDRmOCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfYWNmYzJjOGNhNDA1NDg5ZTgzNGFmNWY1YTgxMjU2YWEgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9seV9saW5lXzIxNDhmMTdhMTlmNDRjYzNhNzJjYjhiYjE5MDRmNGIwID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgIFtbNDMuMjUyNzg2MjQwNjg5NTQ1LCAtMi45MzI1NTcwMDQ5NjE4OTY4XSwgWzQzLjI1MDUzMTEzMzU2ODU2NSwgLTIuOTI5OTA1MDQ0Nzk5ODQ5NF0sIFs0My4yNDkzNTQ4NTU0ODQxMzUsIC0yLjkyNzkwNzUzNDA0MTAzNjVdLCBbNDMuMjQ4NTQ2MTQzMTQ5NiwgLTIuOTI5OTU0MDg5Mzk3MTgxNl0sIFs0My4yNDkzNjgwODk2NzM3MTYsIC0yLjkzMTU1MzM4NjEwNjk4NTZdLCBbNDMuMjUwNjMxMDc2MjU2NTA0LCAtMi45MzM2NzY1NjYzNjEyNzJdLCBbNDMuMjUxNDc1OTc2MDIxODIsIC0yLjkzNTczNzAwODU3MDEwODddLCBbNDMuMjUzMjczMjQ1NDcwMjQsIC0yLjkzNzU1NzQzNTg4NzAxNjJdLCBbNDMuMjUyMDE2MTI4NDU1ODYsIC0yLjkzNzYxNjQ2MDI4NjU5NF0sIFs0My4yNTI4MDI3MzgwODY1NSwgLTIuOTQzMTc4MjExNTU1OTQyNl0sIFs0My4yNTQzNjQwMTI5NTkwNSwgLTIuOTQ0NzE4NTAxNTg4MTExNF0sIFs0My4yNTI4ODk1MzU3NDM5NTQsIC0yLjk0NjQ3OTgwNDIwMzU0NjVdLCBbNDMuMjU2MjI3OTQzOTQzNTY0LCAtMi45NDY0NTM4NzgwODA1NjhdLCBbNDMuMjU4MDAwMTkyNzg5NiwgLTIuOTQ5MDUyNTI5MTI5NjIxNV0sIFs0My4yNjAxMDExNTY4NzgxOCwgLTIuOTUyOTcxNDkzNzU1MjA5NF1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNmYzhkNjIiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiNmYzhkNjIiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF9hY2ZjMmM4Y2E0MDU0ODllODM0YWY1ZjVhODEyNTZhYSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODU3YTJhZWQ5MzQ4NDk4OTg1ZWViMTkyZmI5MDRlYWUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzk0ZjA2YjIyNzFkMDRiN2ZhNGNhNWZmNzU4NGE1NjAxID0gJChgPGRpdiBpZD0iaHRtbF85NGYwNmIyMjcxZDA0YjdmYTRjYTVmZjc1ODRhNTYwMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMjQ8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDQ1PC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBPc3BpdGFsZWE8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDA3NTI5PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzg1N2EyYWVkOTM0ODQ5ODk4NWVlYjE5MmZiOTA0ZWFlLnNldENvbnRlbnQoaHRtbF85NGYwNmIyMjcxZDA0YjdmYTRjYTVmZjc1ODRhNTYwMSk7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV8yMTQ4ZjE3YTE5ZjQ0Y2MzYTcyY2I4YmIxOTA0ZjRiMC5iaW5kUG9wdXAocG9wdXBfODU3YTJhZWQ5MzQ4NDk4OTg1ZWViMTkyZmI5MDRlYWUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzIwNWJiZDFjNDRhNTRiODhhNjFlMjExNTdhNzM5Yzg3ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV8wZTA5YTVhZjgzZDA0NmNhOWI5MTRiOWEyYTBkOTU5YiA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI1MzUwNDgxNzcyNDUwNSwgLTIuOTUzMDUzNzgxNDE2Njg2Nl0sIFs0My4yNTI2NjA5MjU5MjU3NywgLTIuOTU1MzQ5MTk5MzEwNzc4Nl0sIFs0My4yNTM2NjcxODMzNjksIC0yLjk1NjYwOTkxOTIxNjA2NThdLCBbNDMuMjUzODUxMDE5MzYwMjA1LCAtMi45NTkzMTcyMTQ5NDkyODVdLCBbNDMuMjU1Nzk3MTUyMzQxMzE2LCAtMi45NTk2NjM4ODEzNTY2NTQ3XSwgWzQzLjI1Njk3MTU5OTc1NDk5LCAtMi45NjAyNzk4NjkxMjIxNDM1XSwgWzQzLjI1ODY1NzMzNTUwMDc5LCAtMi45NjIzNDIzNjYxNDY1NTY3XSwgWzQzLjI2MTcyOTMzNTU3NjcyNSwgLTIuOTY1MDI4NDY0MjY3MDI3N10sIFs0My4yNjQwOTY5MDE4NjcyOCwgLTIuOTY1MzUxNzExNTQwNDI4NF0sIFs0My4yNjc5NTc3MzUyNjI4NiwgLTIuOTY4MzI2OTQxMTMxODc2N10sIFs0My4yNjMzNDk0ODU3Mzg0MiwgLTIuOTYzNDM3OTUzMTA3NzU3XSwgWzQzLjI2MzMwODA1MTgxNzE2LCAtMi45NjI0MDExNDYxMzI3NTRdLCBbNDMuMjYxMTUzODAwOTI1NzIsIC0yLjk1OTUyNjEzMTUwMTk5NjNdLCBbNDMuMjYwNjc1OTc0NDU4NTIsIC0yLjk1NTk0ODE0ODc5MTY5Ml0sIFs0My4yNTg5MzI3NDAwMjAwMywgLTIuOTU2NzU3MDU2NjEyNzQ0M10sIFs0My4yNTgzNTc4NTgyNjI5MSwgLTIuOTU1NzU3MDYxMDkyNzA3NV0sIFs0My4yNTc3NzE5MDYzNDcwMSwgLTIuOTU0MDQzNTExNTAzNDAzNl0sIFs0My4yNTU4MzA2MTM3NDk0OTUsIC0yLjk1MzgzOTI4MTEzODA2NDNdLCBbNDMuMjU4NjI2Njg3Njk5MTA2LCAtMi45NTE5MzY4MDI1MzMzNjM3XSwgWzQzLjI1OTQ2MDA0MzMwMDE1LCAtMi45NTIyNjkxOTMzODU4NTM0XSwgWzQzLjI1Nzk0NDg1ODYzODA3LCAtMi45NDkwNTU0Njg2NzYyODkzXSwgWzQzLjI1NzU4NzUzNzcwNDEwNCwgLTIuOTQyNTIzODU4Njc4NDM1XSwgWzQzLjI1NzMzMjI1NDIwNDYsIC0yLjkzNzYxMDU0ODM5NzE1MV0sIFs0My4yNTcyMjI3NDQ5NTI1MSwgLTIuOTM1MzAzNTI2MTcwNDg4XSwgWzQzLjI1NjAzNTkyMjM4NDgyNSwgLTIuOTMwMjQ4Mzg0OTgyNDkxNF0sIFs0My4yNTUzNTA4MjgwMjMwMywgLTIuOTI4MzQyNDUzNDE2NTY0XSwgWzQzLjI1NDc3MzA3Nzc1MTUyLCAtMi45MjY3NDM4OTQzNDMwNzQ0XSwgWzQzLjI1NDA4ODQ3OTQyNDEwNSwgLTIuOTI1MDgwMzY4ODQwODcwNl0sIFs0My4yNTUwMjkyNjI4MjU3NDQsIC0yLjkyMjU1NzcyNDYxNzcyNl1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4ZGEwY2IiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiM4ZGEwY2IiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8yMDViYmQxYzQ0YTU0Yjg4YTYxZTIxMTU3YTczOWM4Nyk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjBiYjY0ODA2ZTdkNGQ2ZjhiZGYyMTRjN2RlNmZjN2UgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzI2ZTZjNmVjODU5NDRkMWY5YzNjZGQ5YWZkYjc5Mzc1ID0gJChgPGRpdiBpZD0iaHRtbF8yNmU2YzZlYzg1OTQ0ZDFmOWMzY2RkOWFmZGI3OTM3NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMjY8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMTE3PC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBBdHh1cmk8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDEyNzk2PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzYwYmI2NDgwNmU3ZDRkNmY4YmRmMjE0YzdkZTZmYzdlLnNldENvbnRlbnQoaHRtbF8yNmU2YzZlYzg1OTQ0ZDFmOWMzY2RkOWFmZGI3OTM3NSk7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV8wZTA5YTVhZjgzZDA0NmNhOWI5MTRiOWEyYTBkOTU5Yi5iaW5kUG9wdXAocG9wdXBfNjBiYjY0ODA2ZTdkNGQ2ZjhiZGYyMTRjN2RlNmZjN2UpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzExMTI5OWNkN2Y2YTRjYWFhMGZjODYwYjgyMmRmNWRkID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV84MWY1MThkNWY0NmY0M2ZhYjdkODU3ZGE5OWMwY2NjMiA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI2MjUyNzkzMTQ3NDQ0LCAtMi45NDczNDI2NTY3NTA2NzZdLCBbNDMuMjY0OTI2MTY1MzQxMzM2LCAtMi45NDQwNTk5NzA5NDIyOTA4XSwgWzQzLjI2NDE0NzQ2OTE4ODc4NSwgLTIuOTQwNTE5NTQwNDgxNDY3XSwgWzQzLjI2MzM0ODAxMTU0Mjc0LCAtMi45MzY4NjkyNzEwMzAyNjM3XSwgWzQzLjI2MjY5MDc2MTk3NzAzLCAtMi45MzM3NTA5OTY0MzE1NTldLCBbNDMuMjYxNTI5OTQ2NDAwMTc0LCAtMi45Mjg0NzY1ODA4ODQ2NTEzXSwgWzQzLjI2MDQyMDY5NzY0NjE1NCwgLTIuOTIyNzU1MzgyOTA3ODQ1NF0sIFs0My4yNjQwOTk1MTM1MDAwMiwgLTIuOTIyNTkwMTEyMDcyNTg3N10sIFs0My4yNjQ3NTAzNzM1NDcwNDUsIC0yLjkxODQxMzg4MDAzNTk5ODRdLCBbNDMuMjYxNDE4MjY4NTE3ODE1LCAtMi45MTU4NzAxNjc5NjQ4Ml0sIFs0My4yNjIzOTE0MDAwNzExNDUsIC0yLjkxNTMwNzM1NDM4Mjk0OV0sIFs0My4yNjQ2NjY2MTIzNzA3OSwgLTIuOTEzNjE0ODI0Mjg1OTc3Nl0sIFs0My4yNjQ3NzI3MzM0NDM3MzUsIC0yLjkxMTc5NzgxNjY5NTgzNV0sIFs0My4yNjIyNTMwMzcyMjc3OSwgLTIuOTEzMDczMDM3ODA1MjY1NF0sIFs0My4yNjEyODk5NzA3ODUzMzQsIC0yLjkxMTQ0ODk5MDc2Mjc5MDVdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjZTc4YWMzIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjZTc4YWMzIiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMTExMjk5Y2Q3ZjZhNGNhYWEwZmM4NjBiODIyZGY1ZGQpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzgwNGE5MjY3N2NmZTQ0MzFiNWZkZWI3NTg4ZGY0NTI4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mMTk1MTU5MmI0MzM0ZDYxOWY2YzE2NTFkMTUxNmRlOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjE5NTE1OTJiNDMzNGQ2MTlmNmMxNjUxZDE1MTZkZTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MjI3PC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzExNDwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gQXJhYmVsbGE8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDE0OTM5PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzgwNGE5MjY3N2NmZTQ0MzFiNWZkZWI3NTg4ZGY0NTI4LnNldENvbnRlbnQoaHRtbF9mMTk1MTU5MmI0MzM0ZDYxOWY2YzE2NTFkMTUxNmRlOCk7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV84MWY1MThkNWY0NmY0M2ZhYjdkODU3ZGE5OWMwY2NjMi5iaW5kUG9wdXAocG9wdXBfODA0YTkyNjc3Y2ZlNDQzMWI1ZmRlYjc1ODhkZjQ1MjgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzI1MDA1ZjRlNjUzNDQxYWVhOGY5YzljM2U4MDg4Y2U3ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV80MTk3OTVmZjUwZDI0NmYwODBiZDQ4YjAxMjEwNmRkYiA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI2MTI4OTk3MDc4NTMzNCwgLTIuOTExNDQ4OTkwNzYyNzkwNV0sIFs0My4yNjA2NTgxNDI5NDc1OSwgLTIuOTEyNTk0NjQzMzg4MDg4XSwgWzQzLjI2MTUzMTAwMjA2NTQxLCAtMi45MTUyNzQyNjc1NDQ0NDY3XSwgWzQzLjI2NDkwMDI3Mzg0NTQ2LCAtMi45MTgzMzU3MzIyMDAyNjA4XSwgWzQzLjI2NDk4MjI2MTI4ODc1LCAtMi45MjI0NzY0NzA3NTAyNTk3XSwgWzQzLjI2MzA2MTM2NjU3OTA2NiwgLTIuOTI3NDUyMTEwOTgzMjY1NF0sIFs0My4yNjI2MDIyMzY1MDY1OTUsIC0yLjkyOTI2OTM5NjIzMDU4ODVdLCBbNDMuMjU5Nzk2NDgyNDEyMjg0LCAtMi45MzI1MDgyMTYxMTgyNDFdLCBbNDMuMjYwMjg0MzY5MTk2NDA1LCAtMi45MzcwODMwODY1NDk1MjE3XSwgWzQzLjI2MTM1MzE4NzM0NTExNSwgLTIuOTQxOTk5ODU5ODUyNzg1XSwgWzQzLjI2MjE1MzEwMzkyNTA5NCwgLTIuOTQ1NjQ5MDM3NDYyNDkxN10sIFs0My4yNjI1Mjc5MzE0NzQ0NCwgLTIuOTQ3MzQyNjU2NzUwNjc2XV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2E2ZDg1NCIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAiI2E2ZDg1NCIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJub0NsaXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLjAsICJzbW9vdGhGYWN0b3IiOiAxLjAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzI1MDA1ZjRlNjUzNDQxYWVhOGY5YzljM2U4MDg4Y2U3KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9iNTgzNTc5NDc4YzA0Yjk4YmM5Y2MyNGNkZDI5MTMwMiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOWVmZWMyOWI5OTczNDIxOGJlYTgzYzk2OTQ1ZjM0ODkgPSAkKGA8ZGl2IGlkPSJodG1sXzllZmVjMjliOTk3MzQyMThiZWE4M2M5Njk0NWYzNDg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1ob3ZlciI+PHRyPjx0aD5kaXJlY3Rpb25faWQ8L3RoPjx0ZD48L3RkPjwvdHI+PHRyPjx0aD5yb3V0ZV9pZDwvdGg+PHRkPjIyODwvdGQ+PC90cj48dHI+PHRoPnNlcnZpY2VfaWQ8L3RoPjx0ZD4xPC90ZD48L3RyPjx0cj48dGg+c2hhcGVfaWQ8L3RoPjx0ZD5zaGFwZV8wMTU8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2hlYWRzaWduPC90aD48dGQ+IEFyYWJlbGxhPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQxNTA4MDwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9iNTgzNTc5NDc4YzA0Yjk4YmM5Y2MyNGNkZDI5MTMwMi5zZXRDb250ZW50KGh0bWxfOWVmZWMyOWI5OTczNDIxOGJlYTgzYzk2OTQ1ZjM0ODkpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfNDE5Nzk1ZmY1MGQyNDZmMDgwYmQ0OGIwMTIxMDZkZGIuYmluZFBvcHVwKHBvcHVwX2I1ODM1Nzk0NzhjMDRiOThiYzljYzI0Y2RkMjkxMzAyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF9jOGNjYjU1OGU3Yjg0OTg1YmY5MmZiNDhjOWVjMDg4OCA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfNzRmM2VkOTA5ZWRiNDYyYTgzOWE4Njc1YmY3MmYxY2IgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yODE3MzE3Mjk2MjMwNTQsIC0yLjk2MzAyNTEyNDA1MjExMDRdLCBbNDMuMjc5NDA0OTE2MjU2NDUsIC0yLjk2MTczNzkxOTg0MTYyODVdLCBbNDMuMjc3NzA5MjI2MDA4MzUsIC0yLjk2MDc5MjY0NTkwMTI1N10sIFs0My4yNzU4NzIxMjM4MzEwMiwgLTIuOTU5NzY0OTM3ODI4NjEzN10sIFs0My4yNzM3NjkyMjM3MjM0MzQsIC0yLjk1NzU0ODE4OTAzMzQ1NzRdLCBbNDMuMjcyNzEwNDIyMzU5NjUsIC0yLjk1NTQzNTEyMjQzMjUzM10sIFs0My4yNzE5MjU0OTgwMDkwMjYsIC0yLjk1MDA5NjM0NjEwMDM5OTddLCBbNDMuMjcxNzE2NTQ3MDg3NzA2LCAtMi45NDQ5MzU5MjQ2NzYzMzZdLCBbNDMuMjY5NzYxMTg0NzcwMjgsIC0yLjk0MDcxOTkwMDUwNTQzNl0sIFs0My4yNzAxODEyNzk4MDU4OCwgLTIuOTM3Mjc0MDY1MjcxMDA0NV0sIFs0My4yNjk2ODAxMTIwNjY3OTQsIC0yLjkzMTM4MzA2MjgyNTQyNjVdLCBbNDMuMjY2NDM0OTAzODkxMzUsIC0yLjkyNjgyODE1MDA3NTM3M10sIFs0My4yNjQ0OTIxMzE2MDA2MSwgLTIuOTI0NTA2MDc1ODM0MzAzM10sIFs0My4yNjI4NDUxMjExMjIxMDUsIC0yLjkyMzA1OTE0MzM5OTg2MTZdLCBbNDMuMjU5Nzk1ODMzMTIzMjksIC0yLjkyNDA4NzI3OTMxMzk0OV0sIFs0My4yNjA4NDkxNDE1NjY4LCAtMi45Mjc5MTY4MjUzNDAzMjE2XSwgWzQzLjI1NzU5MjkzMDExNjcyLCAtMi45MzM1MzQyOTAwNjA0NDEzXSwgWzQzLjI1Mzg0OTcyMzA1NTc1LCAtMi45MzQwMjc4OTQwNDA1MDA3XSwgWzQzLjI1MTI3OTc5ODM2MzE5LCAtMi45MzQ2OTM2MzYxNjczOTIzXSwgWzQzLjI0OTYzOTg5OTgyMjA3LCAtMi45MzM3NjE4NTQ3NDkxNzldLCBbNDMuMjQ4MzA0Mzc1Nzc0NjE2LCAtMi45MzMyMDU3NzUwMzQ0NTM2XSwgWzQzLjI0NzY2MDI0NTY1NTg0NCwgLTIuOTMxNjE5MTMzMTE1MTU3XSwgWzQzLjI0Njg5MDg4ODM3Mjc3NSwgLTIuOTI5NzU0NTEzOTE3ODM4NV0sIFs0My4yNDg3NTI1MzY1Nzk0NywgLTIuOTI4MDU4NDMxNTA5OTE4XSwgWzQzLjI0OTQxNzYxMDI3MDg4LCAtMi45MjY4OTg4OTcwNTUzMTA1XV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2ZmZDkyZiIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAiI2ZmZDkyZiIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJub0NsaXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLjAsICJzbW9vdGhGYWN0b3IiOiAxLjAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwX2M4Y2NiNTU4ZTdiODQ5ODViZjkyZmI0OGM5ZWMwODg4KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jNmUxOWYwZWFhNDk0NTYyODQyN2U5ODVkODVmYTBiNiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNDM5MmQ5MzZiNTRmNDE3YjhlN2EyMmExOWFiZTJhMDYgPSAkKGA8ZGl2IGlkPSJodG1sXzQzOTJkOTM2YjU0ZjQxN2I4ZTdhMjJhMTlhYmUyYTA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1ob3ZlciI+PHRyPjx0aD5kaXJlY3Rpb25faWQ8L3RoPjx0ZD48L3RkPjwvdHI+PHRyPjx0aD5yb3V0ZV9pZDwvdGg+PHRkPjIyOTwvdGQ+PC90cj48dHI+PHRoPnNlcnZpY2VfaWQ8L3RoPjx0ZD4xPC90ZD48L3RyPjx0cj48dGg+c2hhcGVfaWQ8L3RoPjx0ZD5zaGFwZV8wMDA8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2hlYWRzaWduPC90aD48dGQ+IFNhbiBJZ25hemlvPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQyNDU1MTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jNmUxOWYwZWFhNDk0NTYyODQyN2U5ODVkODVmYTBiNi5zZXRDb250ZW50KGh0bWxfNDM5MmQ5MzZiNTRmNDE3YjhlN2EyMmExOWFiZTJhMDYpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfNzRmM2VkOTA5ZWRiNDYyYTgzOWE4Njc1YmY3MmYxY2IuYmluZFBvcHVwKHBvcHVwX2M2ZTE5ZjBlYWE0OTQ1NjI4NDI3ZTk4NWQ4NWZhMGI2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF9mYWJiYzViZjUyMjc0MTFmYTAyZjA4ZjJjMjE0NDA1ZiA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfNWMxZDQzYWYxOTcyNDlhNTkxZWJiOTViN2QyN2RlNDcgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNDk0MTc2MTAyNzA4OCwgLTIuOTI2ODk4ODk3MDU1MzEwNV0sIFs0My4yNDg1NDYxNDMxNDk2LCAtMi45Mjk5NTQwODkzOTcxODE2XSwgWzQzLjI0OTM2ODA4OTY3MzcxNiwgLTIuOTMxNTUzMzg2MTA2OTg1Nl0sIFs0My4yNTA2MzEwNzYyNTY1MDQsIC0yLjkzMzY3NjU2NjM2MTI3Ml0sIFs0My4yNTI2OTM2Nzk2MTI2OCwgLTIuOTM0Mjg1NzQyMTUwODc5NV0sIFs0My4yNTQ4Nzc5NDM1OTI0OSwgLTIuOTMzNDAzOTgzNjE1NTc1NF0sIFs0My4yNTYzNDM4Mjg1NTk3OSwgLTIuOTMzMjE1MTcyNTM4NzkzXSwgWzQzLjI1NzkxNDYyMTY1NTc4LCAtMi45MzI4MjIyNjIyODgwOTFdLCBbNDMuMjYwNjM2NjAyNTQ3ODIsIC0yLjkyNzk5ODcyMDYxNjc2XSwgWzQzLjI2MzkzODc1OTE4MDg4LCAtMi45MjM1NzkwODA0ODA3MjI3XSwgWzQzLjI2NjgzMDEyNjg3MjE4NiwgLTIuOTI3MjM2MDkzMTA1NjE4NV0sIFs0My4yNjkyMjY0MTE4MTI2NDYsIC0yLjkzMDMzNjUxNTYzMjcwOF0sIFs0My4yNzAyMjQzNDAwNzYwNTUsIC0yLjkzNzYwNDkwNDA5Nzc5Ml0sIFs0My4yNzA5NzIxNzgzMzM1NSwgLTIuOTQwODU3NDI3MjA0Mjc0NV0sIFs0My4yNzE5NDc4MDYwNzU0NywgLTIuOTQ1MDg1Mzk1NzcyMjU0N10sIFs0My4yNzIxMjE1NzU0Nzk0OSwgLTIuOTUwNTk0MjA4NzM2MjkxNV0sIFs0My4yNzMzMDQ5MjgwMjI2LCAtMi45NTUzMzQ4MzE1MTMxOTEzXSwgWzQzLjI3NDcxOTYxNDAzNjU2LCAtMi45NTg1ODk1NzE0NTIyMTEyXSwgWzQzLjI3Njc3NjAxNTM1MjA1NiwgLTIuOTYwMDU2MTA1MTAyMzUzN10sIFs0My4yNzg4MzMzNTIwOTQ4NCwgLTIuOTYxMTk0NDA4MDM5ODQzNl0sIFs0My4yODE3MDUzMDI5NDA3MTUsIC0yLjk2MjgxMjg1MzU0Nzg5N10sIFs0My4yODE3MzE3Mjk2MjMwNTQsIC0yLjk2MzAyNTEyNDA1MjExMDRdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjZTVjNDk0IiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjZTVjNDk0IiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZmFiYmM1YmY1MjI3NDExZmEwMmYwOGYyYzIxNDQwNWYpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQwY2U3MWFhYjQ1NjQzOTA4MTY2ZTFmMzlkYTk0MTc2ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9iNjcyYjQyNGM4YWI0ZGRmYjJmMTNmOGFhZWI0OTM5MSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjY3MmI0MjRjOGFiNGRkZmIyZjEzZjhhYWViNDkzOTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MjMwPC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzA3OTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gU2FuIElnbmF6aW88L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDI0NjM0PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzQwY2U3MWFhYjQ1NjQzOTA4MTY2ZTFmMzlkYTk0MTc2LnNldENvbnRlbnQoaHRtbF9iNjcyYjQyNGM4YWI0ZGRmYjJmMTNmOGFhZWI0OTM5MSk7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV81YzFkNDNhZjE5NzI0OWE1OTFlYmI5NWI3ZDI3ZGU0Ny5iaW5kUG9wdXAocG9wdXBfNDBjZTcxYWFiNDU2NDM5MDgxNjZlMWYzOWRhOTQxNzYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzY0YzI1OWU2YTFhOTQ2ZjliN2ZmMWZkNjQ5YzdhMTBhID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV83NWVhODg4MmY0NWY0ZDY3YTA2YjYxOTc1NzA5MDlhMyA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI0NjUzODQ5MTIzMDc5NCwgLTIuOTQxMDM3OTU5NjcxMjM4Nl0sIFs0My4yNDYxNzY1MTk5NjUyMywgLTIuOTQwOTY2MzY4NjcyMTAyXSwgWzQzLjI0NTIxMTMxNTk2MzIsIC0yLjkzODI4Mjc2NTAxNjE4MTZdLCBbNDMuMjQ1OTI3MDAwMjIxMTQsIC0yLjkzODA3NzA4NzA3MjQwNjRdLCBbNDMuMjQ4OTM4ODMzMjQ2MzU2LCAtMi45Mzk4MzE0NjE1Mjg5MDE2XSwgWzQzLjI1MDk0NTY3MzkwNDY3NCwgLTIuOTQyMTU5MjMwOTQyODU5Ml0sIFs0My4yNTE3OTE2NDgxODEzNzQsIC0yLjk0NDAwODAyMjk1NDMyMl0sIFs0My4yNTI1NTA2OTkxODM5LCAtMi45NDU1NTMwODc4NTYzNzJdLCBbNDMuMjU0MzMwODMwMzM3NCwgLTIuOTQ0NTk0Mzk5OTQxNzU4M10sIFs0My4yNTY2NDczMTU2MDE1NSwgLTIuOTQyMjY1MTIyMzIxMjcwNF0sIFs0My4yNTg2MDM4NTgwMjkwMywgLTIuOTQxMjUyMTYyMTAzMTQ1Nl0sIFs0My4yNjE1OTE0MzkwNDA0MiwgLTIuOTQwMDMyNDUwMTkwNzU2XSwgWzQzLjI2MzYxNTE0NjM1MzI3NCwgLTIuOTM5MTg3MzcxODk2MTk5XSwgWzQzLjI2MzM0ODAxMTU0Mjc0LCAtMi45MzY4NjkyNzEwMzAyNjM3XSwgWzQzLjI2MjY5MDc2MTk3NzAzLCAtMi45MzM3NTA5OTY0MzE1NTldLCBbNDMuMjYxNTI5OTQ2NDAwMTc0LCAtMi45Mjg0NzY1ODA4ODQ2NTEzXSwgWzQzLjI2MzkzODc1OTE4MDg4LCAtMi45MjM1NzkwODA0ODA3MjI3XSwgWzQzLjI2NTIzMDg2NTMzMDkwNiwgLTIuOTI1MjIzOTc3ODMzMjQzNl0sIFs0My4yNjcxODQ2MDMzNzkwMTUsIC0yLjkyNTE4NDM2NjI3MTQ3ODddLCBbNDMuMjY2MjQxMzE0Mjk5MDgsIC0yLjkyMjg4Mzg0ODE2NDQ5NjVdLCBbNDMuMjY2OTE0NjU0Mzc1NjYsIC0yLjkyMjczNDg1Mjc0OTMxNl0sIFs0My4yNjgwNTI1NjkyNTU5MzYsIC0yLjkyNDQ0MzY4ODA3NjMzMl0sIFs0My4yNjgzNzExODA3ODM2NDYsIC0yLjkyNjQ3ODM1ODQxMDAwNF1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNiM2IzYjMiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiNiM2IzYjMiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF82NGMyNTllNmExYTk0NmY5YjdmZjFmZDY0OWM3YTEwYSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYjk2ZjQ2ZjZlYjMyNDlhMzg0ZmYzMWYwMjE2ZDNlNjYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2QwMDQyNjVlNDhjNjQzOWRiNzdiMTg1OTA3N2RkNGI0ID0gJChgPGRpdiBpZD0iaHRtbF9kMDA0MjY1ZTQ4YzY0MzlkYjc3YjE4NTkwNzdkZDRiNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMzE8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMTEwPC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBDYXN0YcOxb3MvR2F6dGVsZWt1PC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQxMDI2NjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9iOTZmNDZmNmViMzI0OWEzODRmZjMxZjAyMTZkM2U2Ni5zZXRDb250ZW50KGh0bWxfZDAwNDI2NWU0OGM2NDM5ZGI3N2IxODU5MDc3ZGQ0YjQpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfNzVlYTg4ODJmNDVmNGQ2N2EwNmI2MTk3NTcwOTA5YTMuYmluZFBvcHVwKHBvcHVwX2I5NmY0NmY2ZWIzMjQ5YTM4NGZmMzFmMDIxNmQzZTY2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF9jMzYyNTVkYjliN2I0OWE2YjFmNzY5YWY0OTVlZmViOSA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfYjZkOWM5YzgxYjhiNDUzNmI3Y2VlZjgzNjFlMTQ3ODQgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNjgzNzExODA3ODM2NDYsIC0yLjkyNjQ3ODM1ODQxMDAwNF0sIFs0My4yNjkyMDc2NDI3NTMwOTUsIC0yLjkyODYyODQ5ODE5MDgwNzVdLCBbNDMuMjY2MjA4ODk0NTIyODIsIC0yLjkyNTQ5MDk3Nzg5ODYwMDddLCBbNDMuMjY0NDkyMTMxNjAwNjEsIC0yLjkyNDUwNjA3NTgzNDMwMzNdLCBbNDMuMjYyODQ1MTIxMTIyMTA1LCAtMi45MjMwNTkxNDMzOTk4NjE2XSwgWzQzLjI1OTc5NTgzMzEyMzI5LCAtMi45MjQwODcyNzkzMTM5NDldLCBbNDMuMjYxNzMyNTg4MjYxMjgsIC0yLjkyODk2NzA0MTM4NTY0ODNdLCBbNDMuMjYyNzA5ODY3MzkwOTcsIC0yLjkzMzQ1NzIzODcwMjE1NzRdLCBbNDMuMjYzMjg5NzI1MzM5NTUsIC0yLjkzNTk4NzI3NDM0NzM4MzRdLCBbNDMuMjYzNjQ0NjIyMzk5NTQ2LCAtMi45MzkyODYyNDU4MTI0MTA1XSwgWzQzLjI2MTE3MTIxMjU0MzEzLCAtMi45NDAyNzE5NzM5ODg0ODY0XSwgWzQzLjI1ODM1ODk1MTY3NjA0NCwgLTIuOTQxNDExMzc4Nzc1NjMxN10sIFs0My4yNTcyNzU0MTUxMjQ2OCwgLTIuOTQxNzI4OTUzNjU4ODg1XSwgWzQzLjI1NDM2NDAxMjk1OTA1LCAtMi45NDQ3MTg1MDE1ODgxMTE0XSwgWzQzLjI1MjIwNDIxMTg0NzAxLCAtMi45NDUwMDQ3MzQ4Njg2OTg3XSwgWzQzLjI1MTQ1NDQ1MDM5MjAyNSwgLTIuOTQzNDY1MTc3ODk3OTI2XSwgWzQzLjI1MDg1NTQ1MzU1NDYxNCwgLTIuOTQyMTczMzI0NDMzNTk1NV0sIFs0My4yNDg5MDg5OTA3MDMxNCwgLTIuOTM5OTIyNjcyMDMzMjkyM10sIFs0My4yNDU2MzY3OTM1MTUwMywgLTIuOTM3MTQwOTA5NTg2MDQxXSwgWzQzLjI0NTE4MDk1OTc1NjU5NSwgLTIuOTM4NTYxMjA1NzQ5OTczXSwgWzQzLjI0NjUzODQ5MTIzMDc5NCwgLTIuOTQxMDM3OTU5NjcxMjM4Nl1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM2NmMyYTUiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiM2NmMyYTUiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF9jMzYyNTVkYjliN2I0OWE2YjFmNzY5YWY0OTVlZmViOSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOGRmYzAzOWEzYTU4NDIwYmFlNTg3YmI3NDk1YjIyNzIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Y2YWFjMGU4YzkyZDRkNTVhYmMxODM3MDQyYWQyZmNjID0gJChgPGRpdiBpZD0iaHRtbF9mNmFhYzBlOGM5MmQ0ZDU1YWJjMTgzNzA0MmFkMmZjYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMzI8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDExPC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBDYXN0YcOxb3MvR2F6dGVsZWt1PC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQxMDQxMTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84ZGZjMDM5YTNhNTg0MjBiYWU1ODdiYjc0OTViMjI3Mi5zZXRDb250ZW50KGh0bWxfZjZhYWMwZThjOTJkNGQ1NWFiYzE4MzcwNDJhZDJmY2MpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfYjZkOWM5YzgxYjhiNDUzNmI3Y2VlZjgzNjFlMTQ3ODQuYmluZFBvcHVwKHBvcHVwXzhkZmMwMzlhM2E1ODQyMGJhZTU4N2JiNzQ5NWIyMjcyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF84OGEwMzBhNDEzMDE0NTFkOTRmOWUwNGQ5OWJkZTlmZCA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfNmRhOGU4MDUyYjRkNDM2OWJmYjQ5YTdmN2U1ZGExNzIgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNDg1NDYxNDMxNDk2LCAtMi45Mjk5NTQwODkzOTcxODE2XSwgWzQzLjI0OTM2ODA4OTY3MzcxNiwgLTIuOTMxNTUzMzg2MTA2OTg1Nl0sIFs0My4yNTA2MzEwNzYyNTY1MDQsIC0yLjkzMzY3NjU2NjM2MTI3Ml0sIFs0My4yNTE0NzU5NzYwMjE4MiwgLTIuOTM1NzM3MDA4NTcwMTA4N10sIFs0My4yNTMxMjk4MjQ3NDAzOSwgLTIuOTM1NDg0NDY2MTI2ODk0Nl0sIFs0My4yNTQ1NzQxOTQzMTcxMTUsIC0yLjkzNDU3NjQzMzcwNjc0MV0sIFs0My4yNTQ4Nzc5NDM1OTI0OSwgLTIuOTMzNDAzOTgzNjE1NTc1NF0sIFs0My4yNTYzNDM4Mjg1NTk3OSwgLTIuOTMzMjE1MTcyNTM4NzkzXSwgWzQzLjI1NzkxNDYyMTY1NTc4LCAtMi45MzI4MjIyNjIyODgwOTFdLCBbNDMuMjYwNjM2NjAyNTQ3ODIsIC0yLjkyNzk5ODcyMDYxNjc2XSwgWzQzLjI1OTU2MjQ2MzcxOTE1LCAtMi45MjQwMzc4ODExOTgwMTAzXSwgWzQzLjI1NzA5MDM0MjUzMzA3NSwgLTIuOTI3MTI5Mjk1MDc3OTIzN10sIFs0My4yNTQ3NzMwNzc3NTE1MiwgLTIuOTI2NzQzODk0MzQzMDc0NF0sIFs0My4yNTQwODg0Nzk0MjQxMDUsIC0yLjkyNTA4MDM2ODg0MDg3MDZdLCBbNDMuMjU1MDI5MjYyODI1NzQ0LCAtMi45MjI1NTc3MjQ2MTc3MjZdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjZmM4ZDYyIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjZmM4ZDYyIiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODhhMDMwYTQxMzAxNDUxZDk0ZjllMDRkOTliZGU5ZmQpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2Y4MmRjNWRmNWVhYzQ4MmZiYzEzNmI3YjUzZTg3MDJjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81NjBmNjE5Yzk4MGQ0NjBlODIxMDcyMWZjY2Y1MGU3MCA9ICQoYDxkaXYgaWQ9Imh0bWxfNTYwZjYxOWM5ODBkNDYwZTgyMTA3MjFmY2NmNTBlNzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MjMzPC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzA4MDwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gQXR4dXJpPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQwNjYyODwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mODJkYzVkZjVlYWM0ODJmYmMxMzZiN2I1M2U4NzAyYy5zZXRDb250ZW50KGh0bWxfNTYwZjYxOWM5ODBkNDYwZTgyMTA3MjFmY2NmNTBlNzApOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfNmRhOGU4MDUyYjRkNDM2OWJmYjQ5YTdmN2U1ZGExNzIuYmluZFBvcHVwKHBvcHVwX2Y4MmRjNWRmNWVhYzQ4MmZiYzEzNmI3YjUzZTg3MDJjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF8zODNkNmE3OWJjYzM0NGNlYTg0MzY0ZTg2Mzg5Yzc3NyA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfZGEyMDc1ZmFhZDk1NDY1Zjk1MGQ2ZWY5ZWE0MzBjNGQgPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNTUwMjkyNjI4MjU3NDQsIC0yLjkyMjU1NzcyNDYxNzcyNl0sIFs0My4yNTY1OTYzMTQ4MTMzODYsIC0yLjkyNTcwNzkwNDcwOTQ1NDVdLCBbNDMuMjU5Nzk1ODMzMTIzMjksIC0yLjkyNDA4NzI3OTMxMzk0OV0sIFs0My4yNjA4NDkxNDE1NjY4LCAtMi45Mjc5MTY4MjUzNDAzMjE2XSwgWzQzLjI1Njg0MDYzMDYzNTE0NiwgLTIuOTM0OTg0NzE1ODQ3NzU4NF0sIFs0My4yNTQ5MDUwODc2NzU1MywgLTIuOTM2Mjg1MTcyOTY2NzcyXSwgWzQzLjI1MzI3MzI0NTQ3MDI0LCAtMi45Mzc1NTc0MzU4ODcwMTYyXSwgWzQzLjI1MjAxNjEyODQ1NTg2LCAtMi45Mzc2MTY0NjAyODY1OTRdLCBbNDMuMjUwODE0NDg1NDM1OTYsIC0yLjkzNTc0NjM2NTE1MTA4OF0sIFs0My4yNDk2Mzk4OTk4MjIwNywgLTIuOTMzNzYxODU0NzQ5MTc5XSwgWzQzLjI0ODMwNDM3NTc3NDYxNiwgLTIuOTMzMjA1Nzc1MDM0NDUzNl0sIFs0My4yNDc2NjAyNDU2NTU4NDQsIC0yLjkzMTYxOTEzMzExNTE1N10sIFs0My4yNDY4OTA4ODgzNzI3NzUsIC0yLjkyOTc1NDUxMzkxNzgzODVdLCBbNDMuMjQ4NTQ2MTQzMTQ5NiwgLTIuOTI5OTU0MDg5Mzk3MTgxNl1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiM4ZGEwY2IiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiM4ZGEwY2IiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zODNkNmE3OWJjYzM0NGNlYTg0MzY0ZTg2Mzg5Yzc3Nyk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjJmMGJiNzEwYzlkNDNlM2E2YTMyZWIzZjZiZTllYWIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzQ1NTIxYjk2Mjc4MjQxZWI5Mjc2MWQ1MGE1ZDAwOTQ3ID0gJChgPGRpdiBpZD0iaHRtbF80NTUyMWI5NjI3ODI0MWViOTI3NjFkNTBhNWQwMDk0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMzQ8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDM1PC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBBdHh1cmk8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDA2ODE1PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2YyZjBiYjcxMGM5ZDQzZTNhNmEzMmViM2Y2YmU5ZWFiLnNldENvbnRlbnQoaHRtbF80NTUyMWI5NjI3ODI0MWViOTI3NjFkNTBhNWQwMDk0Nyk7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV9kYTIwNzVmYWFkOTU0NjVmOTUwZDZlZjllYTQzMGM0ZC5iaW5kUG9wdXAocG9wdXBfZjJmMGJiNzEwYzlkNDNlM2E2YTMyZWIzZjZiZTllYWIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzRjZjA3OWZlNjEwZTQyNWJhYmVmYmZkM2ExOWQwYTlmID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV9mNGM1MDg1NzZkMDU0ZmFhOWU2MTBlYzM0ZWQ3ZWM2ZSA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI0NjQ0MTg1NDgyMTg5LCAtMi45NDIwNzMyNDA1MDk5MTk3XSwgWzQzLjI0OTQxNjk3ODAxODQ5NSwgLTIuOTQ2NjExNjQzNDEyNjkwNl0sIFs0My4yNTIyNTY2NDM2ODY3NiwgLTIuOTQ2MTgzMzMxODg1Nzg5XSwgWzQzLjI1MTQ1NDQ1MDM5MjAyNSwgLTIuOTQzNDY1MTc3ODk3OTI2XSwgWzQzLjI1MDg1NTQ1MzU1NDYxNCwgLTIuOTQyMTczMzI0NDMzNTk1NV0sIFs0My4yNDg5MDg5OTA3MDMxNCwgLTIuOTM5OTIyNjcyMDMzMjkyM10sIFs0My4yNDU2MzY3OTM1MTUwMywgLTIuOTM3MTQwOTA5NTg2MDQxXSwgWzQzLjI0NDg4NTk0NzM1ODQ5LCAtMi45MzM1MjI4MTE0NjU2OTM3XSwgWzQzLjI0Njk0ODQ5MzU1NDc3NSwgLTIuOTMyNDI4MjY1MTc2NzAzNV0sIFs0My4yNDg0OTc5NzYzNDAwNTUsIC0yLjkzMzEzNTc2NTM4NjU4OTNdLCBbNDMuMjUwNjMxMDc2MjU2NTA0LCAtMi45MzM2NzY1NjYzNjEyNzJdLCBbNDMuMjUyNjkzNjc5NjEyNjgsIC0yLjkzNDI4NTc0MjE1MDg3OTVdLCBbNDMuMjU0ODc3OTQzNTkyNDksIC0yLjkzMzQwMzk4MzYxNTU3NTRdLCBbNDMuMjU2MzQzODI4NTU5NzksIC0yLjkzMzIxNTE3MjUzODc5M10sIFs0My4yNTc3MTI4MzIyNzY2MywgLTIuOTM1MDUwMDk2NTk0Mjk0N10sIFs0My4yNTkxMTg4MTYwNzkyOCwgLTIuOTM3NTA2NDIyNjk1MzgxM10sIFs0My4yNjE1OTE0MzkwNDA0MiwgLTIuOTQwMDMyNDUwMTkwNzU2XSwgWzQzLjI2MzYxNTE0NjM1MzI3NCwgLTIuOTM5MTg3MzcxODk2MTk5XSwgWzQzLjI2MzM0ODAxMTU0Mjc0LCAtMi45MzY4NjkyNzEwMzAyNjM3XSwgWzQzLjI2MjMyNTEyNzQwNzQsIC0yLjkzNDU5OTY4OTE5OTYyMjddXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjZTc4YWMzIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjZTc4YWMzIiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNGNmMDc5ZmU2MTBlNDI1YmFiZWZiZmQzYTE5ZDBhOWYpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2U5YzkzZWNhN2NlYzRjZTlhYWVmMWViMWQwYzNiMmVmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hNzZjMGEyYjM5NDU0OWU3OGQ4YmYzZmJlNThiNGJiOCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTc2YzBhMmIzOTQ1NDllNzhkOGJmM2ZiZTU4YjRiYjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MjM1PC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzEwNTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gTW95dWE8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDA5OTc2PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2U5YzkzZWNhN2NlYzRjZTlhYWVmMWViMWQwYzNiMmVmLnNldENvbnRlbnQoaHRtbF9hNzZjMGEyYjM5NDU0OWU3OGQ4YmYzZmJlNThiNGJiOCk7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV9mNGM1MDg1NzZkMDU0ZmFhOWU2MTBlYzM0ZWQ3ZWM2ZS5iaW5kUG9wdXAocG9wdXBfZTljOTNlY2E3Y2VjNGNlOWFhZWYxZWIxZDBjM2IyZWYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwX2JlNTAyZTUzZWY3YzQyZmZhYjkyNWFjZDY2YmYxMjA5ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV8xNTNkN2U2ZDY4Njg0YTMyYTRkYTdiZTljYjgzOGZkMCA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI2MjMyNTEyNzQwNzQsIC0yLjkzNDU5OTY4OTE5OTYyMjddLCBbNDMuMjU4MTgyOTYwNTUwMzY0LCAtMi45MzUzNDc3NDg2NDMyOTk1XSwgWzQzLjI1Njg0MDYzMDYzNTE0NiwgLTIuOTM0OTg0NzE1ODQ3NzU4NF0sIFs0My4yNTQ5MDUwODc2NzU1MywgLTIuOTM2Mjg1MTcyOTY2NzcyXSwgWzQzLjI1MzI3MzI0NTQ3MDI0LCAtMi45Mzc1NTc0MzU4ODcwMTYyXSwgWzQzLjI1MjAxNjEyODQ1NTg2LCAtMi45Mzc2MTY0NjAyODY1OTRdLCBbNDMuMjUwODE0NDg1NDM1OTYsIC0yLjkzNTc0NjM2NTE1MTA4OF0sIFs0My4yNDk2Mzk4OTk4MjIwNywgLTIuOTMzNzYxODU0NzQ5MTc5XSwgWzQzLjI0ODMwNDM3NTc3NDYxNiwgLTIuOTMzMjA1Nzc1MDM0NDUzNl0sIFs0My4yNDY5Mjc0ODg0MDA2MiwgLTIuOTMyNTQyMDM1MDA2NjUwN10sIFs0My4yNDQ5MjgxNzg3ODI1NiwgLTIuOTMzNzQzMjE1MjIwMDYxXSwgWzQzLjI0NTkyNzAwMDIyMTE0LCAtMi45MzgwNzcwODcwNzI0MDY0XSwgWzQzLjI0ODkzODgzMzI0NjM1NiwgLTIuOTM5ODMxNDYxNTI4OTAxNl0sIFs0My4yNTA5NDU2NzM5MDQ2NzQsIC0yLjk0MjE1OTIzMDk0Mjg1OTJdLCBbNDMuMjUxNzkxNjQ4MTgxMzc0LCAtMi45NDQwMDgwMjI5NTQzMjJdLCBbNDMuMjUyNDY2MzE1NDc5NjIsIC0yLjk0NjI0NzYwMjUzOTgwMV0sIFs0My4yNDk0MjM0MTk3ODQ2MSwgLTIuOTQ2OTg2NzY0NzgyNzA3N10sIFs0My4yNDY2ODQyNDc1OTAwNzUsIC0yLjk0MTY0NzM3OTM3NzAzM10sIFs0My4yNDY0NDE4NTQ4MjE4OSwgLTIuOTQyMDczMjQwNTA5OTE5N11dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNhNmQ4NTQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiNhNmQ4NTQiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF9iZTUwMmU1M2VmN2M0MmZmYWI5MjVhY2Q2NmJmMTIwOSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTljYzI0ZGUxZGE3NDU4Njk3N2QxMDBlYzRmM2JhNjEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Y3YzY5NTljOGQ1NjRhMmE4ZjQwN2QwNmY1ZGIxNTdhID0gJChgPGRpdiBpZD0iaHRtbF9mN2M2OTU5YzhkNTY0YTJhOGY0MDdkMDZmNWRiMTU3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMzY8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDgyPC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBNb3l1YTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaWQ8L3RoPjx0ZD40MTAxMDA8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYTljYzI0ZGUxZGE3NDU4Njk3N2QxMDBlYzRmM2JhNjEuc2V0Q29udGVudChodG1sX2Y3YzY5NTljOGQ1NjRhMmE4ZjQwN2QwNmY1ZGIxNTdhKTsKICAgICAgICAKCiAgICAgICAgcG9seV9saW5lXzE1M2Q3ZTZkNjg2ODRhMzJhNGRhN2JlOWNiODM4ZmQwLmJpbmRQb3B1cChwb3B1cF9hOWNjMjRkZTFkYTc0NTg2OTc3ZDEwMGVjNGYzYmE2MSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfMGZhNDE1YzRjYTY0NDY4ZTk2ZWM0OTk5ODJhNjdmYjEgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9seV9saW5lXzZkYjc4Nzk2NzViYjRmMjJhNWExZTBlNzk1MGEwZGNjID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgIFtbNDMuMjM4NzY3OTkyNDEzNTMsIC0yLjk0ODQ3ODQwOTUwNjI2OF0sIFs0My4yNDA0NTg5MDMzNTkxLCAtMi45NDk2NTQwODkyNDc5NzM3XSwgWzQzLjI0MzE5OTYyMTcwMTM2NSwgLTIuOTQ5MDg0OTEwOTgyODgwM10sIFs0My4yNDY5MzEyMDM2MTUxNiwgLTIuOTQ4MjYzOTE5NDc0MjA0Nl0sIFs0My4yNDk0MTY5NzgwMTg0OTUsIC0yLjk0NjYxMTY0MzQxMjY5MDZdLCBbNDMuMjUyMjU2NjQzNjg2NzYsIC0yLjk0NjE4MzMzMTg4NTc4OV0sIFs0My4yNTQzMzA4MzAzMzc0LCAtMi45NDQ1OTQzOTk5NDE3NTgzXSwgWzQzLjI1NjY0NzMxNTYwMTU1LCAtMi45NDIyNjUxMjIzMjEyNzA0XSwgWzQzLjI1ODYwMzg1ODAyOTAzLCAtMi45NDEyNTIxNjIxMDMxNDU2XSwgWzQzLjI2MTU5MTQzOTA0MDQyLCAtMi45NDAwMzI0NTAxOTA3NTZdLCBbNDMuMjYzNjE1MTQ2MzUzMjc0LCAtMi45MzkxODczNzE4OTYxOTldLCBbNDMuMjYzMzQ4MDExNTQyNzQsIC0yLjkzNjg2OTI3MTAzMDI2MzddLCBbNDMuMjYyNjkwNzYxOTc3MDMsIC0yLjkzMzc1MDk5NjQzMTU1OV0sIFs0My4yNjE1Mjk5NDY0MDAxNzQsIC0yLjkyODQ3NjU4MDg4NDY1MTNdLCBbNDMuMjU5NTYyNDYzNzE5MTUsIC0yLjkyNDAzNzg4MTE5ODAxMDNdLCBbNDMuMjU3MDkwMzQyNTMzMDc1LCAtMi45MjcxMjkyOTUwNzc5MjM3XSwgWzQzLjI1NDA4ODQ3OTQyNDEwNSwgLTIuOTI1MDgwMzY4ODQwODcwNl0sIFs0My4yNTQ3NzMwNzc3NTE1MiwgLTIuOTI2NzQzODk0MzQzMDc0NF0sIFs0My4yNTQ5Nzk5NDU5NTcyNSwgLTIuOTIyMDk5Nzg5OTA0NjE5XSwgWzQzLjI1MzU3MTEwNzQzMDMyNSwgLTIuOTIxMzQ4MjQ4NzMzOTczXSwgWzQzLjI1MTQ1ODA4NDk1MjE1NSwgLTIuOTIxNDQ0NTc1MDY4NjU1XSwgWzQzLjI0OTk5NDUzNzIwNTIyLCAtMi45MTY4NTAzODA0MDc5NzhdLCBbNDMuMjQ5OTkyMDY1NTEzNjMsIC0yLjkxNzQ3ODI1NzE1NzA2ODVdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjZmZkOTJmIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjZmZkOTJmIiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMGZhNDE1YzRjYTY0NDY4ZTk2ZWM0OTk5ODJhNjdmYjEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQ0N2I0ZjVlODhkMjQ5Y2NiMDA2MGUxN2FlYzA2MzlhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF84ZmNjMzU5NjFhN2Y0MmIxYjBiYzBkMzE2YWEyODRmMiA9ICQoYDxkaXYgaWQ9Imh0bWxfOGZjYzM1OTYxYTdmNDJiMWIwYmMwZDMxNmFhMjg0ZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MjM3PC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzExMjwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gTWluYSBEZWwgTW9ycm88L3RkPjwvdHI+PHRyPjx0aD50cmlwX2lkPC90aD48dGQ+NDExMjI2PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzQ0N2I0ZjVlODhkMjQ5Y2NiMDA2MGUxN2FlYzA2MzlhLnNldENvbnRlbnQoaHRtbF84ZmNjMzU5NjFhN2Y0MmIxYjBiYzBkMzE2YWEyODRmMik7CiAgICAgICAgCgogICAgICAgIHBvbHlfbGluZV82ZGI3ODc5Njc1YmI0ZjIyYTVhMWUwZTc5NTBhMGRjYy5iaW5kUG9wdXAocG9wdXBfNDQ3YjRmNWU4OGQyNDljY2IwMDYwZTE3YWVjMDYzOWEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzE1NDc0NzdhZmFkYzRhMjc4Yjk2ZmFlMjFjYzAwYjJjID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvbHlfbGluZV85OTFjZGZjNTYwZjE0MTVhOGFiOWY0ZWNhMjIwMDAzMyA9IEwucG9seWxpbmUoCiAgICAgICAgICAgICAgICBbWzQzLjI0OTk5MjA2NTUxMzYzLCAtMi45MTc0NzgyNTcxNTcwNjg1XSwgWzQzLjI0ODg4NDQ3MzA0OTY4LCAtMi45MTkzMzcwMzQ0OTM1MDk1XSwgWzQzLjI1MTUzMTM3NTI3NjEsIC0yLjkyMTQxNDQ0NTI1MTUwNjddLCBbNDMuMjUzNTk2NDczNjg4NDc1LCAtMi45MjEyNzQwODAxNDE1MjkzXSwgWzQzLjI1NTAzMDY1MjEyODcsIC0yLjkyMjAwMTcxOTEzMTA3NjhdLCBbNDMuMjU2NTk2MzE0ODEzMzg2LCAtMi45MjU3MDc5MDQ3MDk0NTQ1XSwgWzQzLjI1OTc5NTgzMzEyMzI5LCAtMi45MjQwODcyNzkzMTM5NDldLCBbNDMuMjYxNzMyNTg4MjYxMjgsIC0yLjkyODk2NzA0MTM4NTY0ODNdLCBbNDMuMjYyNzA5ODY3MzkwOTcsIC0yLjkzMzQ1NzIzODcwMjE1NzRdLCBbNDMuMjYzMjg5NzI1MzM5NTUsIC0yLjkzNTk4NzI3NDM0NzM4MzRdLCBbNDMuMjYzNjQ0NjIyMzk5NTQ2LCAtMi45MzkyODYyNDU4MTI0MTA1XSwgWzQzLjI2MTE3MTIxMjU0MzEzLCAtMi45NDAyNzE5NzM5ODg0ODY0XSwgWzQzLjI1ODM1ODk1MTY3NjA0NCwgLTIuOTQxNDExMzc4Nzc1NjMxN10sIFs0My4yNTcyNzU0MTUxMjQ2OCwgLTIuOTQxNzI4OTUzNjU4ODg1XSwgWzQzLjI1NDM2NDAxMjk1OTA1LCAtMi45NDQ3MTg1MDE1ODgxMTE0XSwgWzQzLjI1MjQ2NjMxNTQ3OTYyLCAtMi45NDYyNDc2MDI1Mzk4MDFdLCBbNDMuMjQ5NDIzNDE5Nzg0NjEsIC0yLjk0Njk4Njc2NDc4MjcwNzddLCBbNDMuMjQ1ODI1ODcxNTc5NDIsIC0yLjk0ODY5MjY4MzUwODg2NF0sIFs0My4yNDM0MzQ1NjUwOTQ5MiwgLTIuOTQ5MDcwNzc2NjkwNDY0XSwgWzQzLjI0MDExNDcwNTUyMzk5LCAtMi45NDk3MzMwNzcwNTQ3OTVdLCBbNDMuMjM4NzY3OTkyNDEzNTMsIC0yLjk0ODQ3ODQwOTUwNjI2OF1dLAogICAgICAgICAgICAgICAgeyJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwgImNvbG9yIjogIiNlNWM0OTQiLCAiZGFzaEFycmF5IjogbnVsbCwgImRhc2hPZmZzZXQiOiBudWxsLCAiZmlsbCI6IGZhbHNlLCAiZmlsbENvbG9yIjogIiNlNWM0OTQiLCAiZmlsbE9wYWNpdHkiOiAwLjIsICJmaWxsUnVsZSI6ICJldmVub2RkIiwgImxpbmVDYXAiOiAicm91bmQiLCAibGluZUpvaW4iOiAicm91bmQiLCAibm9DbGlwIjogZmFsc2UsICJvcGFjaXR5IjogMS4wLCAic21vb3RoRmFjdG9yIjogMS4wLCAic3Ryb2tlIjogdHJ1ZSwgIndlaWdodCI6IDN9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8xNTQ3NDc3YWZhZGM0YTI3OGI5NmZhZTIxY2MwMGIyYyk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTMzN2ZjNmJlZGVjNGY2MjkzN2MwNmJlNjUxN2I0NGIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2ZmMjE5Nzg2NTJiMzQyZDE4Y2MzMmFmOWRhNTRlYWIxID0gJChgPGRpdiBpZD0iaHRtbF9mZjIxOTc4NjUyYjM0MmQxOGNjMzJhZjlkYTU0ZWFiMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1jb25kZW5zZWQgdGFibGUtaG92ZXIiPjx0cj48dGg+ZGlyZWN0aW9uX2lkPC90aD48dGQ+PC90ZD48L3RyPjx0cj48dGg+cm91dGVfaWQ8L3RoPjx0ZD4yMzg8L3RkPjwvdHI+PHRyPjx0aD5zZXJ2aWNlX2lkPC90aD48dGQ+MTwvdGQ+PC90cj48dHI+PHRoPnNoYXBlX2lkPC90aD48dGQ+c2hhcGVfMDMwPC90ZD48L3RyPjx0cj48dGg+dHJpcF9oZWFkc2lnbjwvdGg+PHRkPiBNaW5hIERlbCBNb3JybzwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaWQ8L3RoPjx0ZD40MTE1MDg8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYTMzN2ZjNmJlZGVjNGY2MjkzN2MwNmJlNjUxN2I0NGIuc2V0Q29udGVudChodG1sX2ZmMjE5Nzg2NTJiMzQyZDE4Y2MzMmFmOWRhNTRlYWIxKTsKICAgICAgICAKCiAgICAgICAgcG9seV9saW5lXzk5MWNkZmM1NjBmMTQxNWE4YWI5ZjRlY2EyMjAwMDMzLmJpbmRQb3B1cChwb3B1cF9hMzM3ZmM2YmVkZWM0ZjYyOTM3YzA2YmU2NTE3YjQ0YikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfMGQzMWQ5ZWZmMDIxNGE4OGJmMGU2ZmQ1N2Y1ZjY3ZTcgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9seV9saW5lXzNmMTQ0YWE2NWI5ZjQ2MjRhZDEwZmQ4Mzc4ZmFhNDdlID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgIFtbNDMuMjcxMTIzODg1MzMwMTM0LCAtMi45NzA5OTYyODA2OTUwMTQ4XSwgWzQzLjI3MjE4NzQwMTA0MjI1LCAtMi45NjkyNDE4ODY2NDk1NzI3XSwgWzQzLjI3MzM5OTM0Njk0ODM5NSwgLTIuOTcwNjI4NjkzMTgxMjAzNl0sIFs0My4yNzUwMTc4NzEzMzU0NCwgLTIuOTcyNzE2OTk5ODA4ODMyN10sIFs0My4yNzc0NzA0MTI3NzIzNSwgLTIuOTc0OTQ5Njk0MjU0NzI1M10sIFs0My4yNzY2NDgzMjMyOTQ5MzUsIC0yLjk3MjE2MDU4MTUwNjk4ODVdLCBbNDMuMjY0NzI0NjgwNzU5MDgsIC0yLjk2MTE0OTkwMTQ2NjAyMTZdLCBbNDMuMjYyNTQ3MDkxMDkzMDA1LCAtMi45NTYzMjg5NTM0MTgyNTMzXSwgWzQzLjI1OTQ2MDA0MzMwMDE1LCAtMi45NTIyNjkxOTMzODU4NTM0XSwgWzQzLjI1Nzk0NDg1ODYzODA3LCAtMi45NDkwNTU0Njg2NzYyODkzXSwgWzQzLjI1NzU4NzUzNzcwNDEwNCwgLTIuOTQyNTIzODU4Njc4NDM1XSwgWzQzLjI1NzMzMjI1NDIwNDYsIC0yLjkzNzYxMDU0ODM5NzE1MV0sIFs0My4yNTcyMjI3NDQ5NTI1MSwgLTIuOTM1MzAzNTI2MTcwNDg4XSwgWzQzLjI1NzkxNDYyMTY1NTc4LCAtMi45MzI4MjIyNjIyODgwOTFdLCBbNDMuMjYwNjM2NjAyNTQ3ODIsIC0yLjkyNzk5ODcyMDYxNjc2XSwgWzQzLjI1OTU2MjQ2MzcxOTE1LCAtMi45MjQwMzc4ODExOTgwMTAzXSwgWzQzLjI1NzA5MDM0MjUzMzA3NSwgLTIuOTI3MTI5Mjk1MDc3OTIzN10sIFs0My4yNTQ3NzMwNzc3NTE1MiwgLTIuOTI2NzQzODk0MzQzMDc0NF0sIFs0My4yNTQwODg0Nzk0MjQxMDUsIC0yLjkyNTA4MDM2ODg0MDg3MDZdLCBbNDMuMjU1MDI5MjYyODI1NzQ0LCAtMi45MjI1NTc3MjQ2MTc3MjZdXSwKICAgICAgICAgICAgICAgIHsiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsICJjb2xvciI6ICIjYjNiM2IzIiwgImRhc2hBcnJheSI6IG51bGwsICJkYXNoT2Zmc2V0IjogbnVsbCwgImZpbGwiOiBmYWxzZSwgImZpbGxDb2xvciI6ICIjYjNiM2IzIiwgImZpbGxPcGFjaXR5IjogMC4yLCAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsICJsaW5lQ2FwIjogInJvdW5kIiwgImxpbmVKb2luIjogInJvdW5kIiwgIm5vQ2xpcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEuMCwgInNtb290aEZhY3RvciI6IDEuMCwgInN0cm9rZSI6IHRydWUsICJ3ZWlnaHQiOiAzfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMGQzMWQ5ZWZmMDIxNGE4OGJmMGU2ZmQ1N2Y1ZjY3ZTcpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzcwMjcwMmEwYmI0YzQ4OGNhYjEzOGNmYmY1OWJhMDFkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85N2Q4OTk4NDEyYjI0NzhhYTRjYjkxOGRmMmYyNWE0MiA9ICQoYDxkaXYgaWQ9Imh0bWxfOTdkODk5ODQxMmIyNDc4YWE0Y2I5MThkZjJmMjVhNDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtY29uZGVuc2VkIHRhYmxlLWhvdmVyIj48dHI+PHRoPmRpcmVjdGlvbl9pZDwvdGg+PHRkPjwvdGQ+PC90cj48dHI+PHRoPnJvdXRlX2lkPC90aD48dGQ+MjM5PC90ZD48L3RyPjx0cj48dGg+c2VydmljZV9pZDwvdGg+PHRkPjE8L3RkPjwvdHI+PHRyPjx0aD5zaGFwZV9pZDwvdGg+PHRkPnNoYXBlXzEyMDwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaGVhZHNpZ248L3RoPjx0ZD4gQXR4dXJpPC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQwNzAyNjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83MDI3MDJhMGJiNGM0ODhjYWIxMzhjZmJmNTliYTAxZC5zZXRDb250ZW50KGh0bWxfOTdkODk5ODQxMmIyNDc4YWE0Y2I5MThkZjJmMjVhNDIpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfM2YxNDRhYTY1YjlmNDYyNGFkMTBmZDgzNzhmYWE0N2UuYmluZFBvcHVwKHBvcHVwXzcwMjcwMmEwYmI0YzQ4OGNhYjEzOGNmYmY1OWJhMDFkKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF9mNDYzZWVhMDA3YTY0ZWQzYTliNTNlNGYxNzRjMDBjZCA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb2x5X2xpbmVfN2U5ZjBjNDEwMmNiNGRjNWI3YzJhYjE3MDgzMGMzZDggPSBMLnBvbHlsaW5lKAogICAgICAgICAgICAgICAgW1s0My4yNTUwMjkyNjI4MjU3NDQsIC0yLjkyMjU1NzcyNDYxNzcyNl0sIFs0My4yNTY1OTYzMTQ4MTMzODYsIC0yLjkyNTcwNzkwNDcwOTQ1NDVdLCBbNDMuMjU5Nzk1ODMzMTIzMjksIC0yLjkyNDA4NzI3OTMxMzk0OV0sIFs0My4yNjA4NDkxNDE1NjY4LCAtMi45Mjc5MTY4MjUzNDAzMjE2XSwgWzQzLjI1NzM1MDc1MTM4Mzg0NiwgLTIuOTM1MzEzNjYwMDQyNzE1NF0sIFs0My4yNTc0ODIxMjQxMzEyLCAtMi45Mzc4NTkxMTMwNzkyMjVdLCBbNDMuMjU3NzE4NjQwNDQyNCwgLTIuOTQyNzM4MDAyMzI2OTk0NV0sIFs0My4yNTgwMDAxOTI3ODk2LCAtMi45NDkwNTI1MjkxMjk2MjE1XSwgWzQzLjI2MDEwMTE1Njg3ODE4LCAtMi45NTI5NzE0OTM3NTUyMDk0XSwgWzQzLjI2MjgxNjU2MDMwMzI4LCAtMi45NTYzOTk3NTc1MzE2MDU3XSwgWzQzLjI2NDk3MjExNTM1MTY5LCAtMi45NjEyMjEwNzQ2MTMwMjQzXSwgWzQzLjI3NTY4NzE4NjkwODYsIC0yLjk3MTkwMDAxNzM2MjczNzddLCBbNDMuMjczMjA2NTU4OTg2MjgsIC0yLjk3MTU3NjE0OTM0ODIyNF0sIFs0My4yNzE5NjQ5OTcwNjQ5MzQsIC0yLjk2OTQzNjQwNjQ4MDc4NjNdLCBbNDMuMjcxMTIzODg1MzMwMTM0LCAtMi45NzA5OTYyODA2OTUwMTQ4XV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiIzY2YzJhNSIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAiIzY2YzJhNSIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJub0NsaXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLjAsICJzbW9vdGhGYWN0b3IiOiAxLjAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y0NjNlZWEwMDdhNjRlZDNhOWI1M2U0ZjE3NGMwMGNkKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lMWY5YjU4NDkxMGY0YjE4YTZjY2U3MTg0ZWRmODk0MyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMGU2OTE5ZWM4MTc1NGYxNjkyMjJkYjJkNDY5OTg3MDEgPSAkKGA8ZGl2IGlkPSJodG1sXzBlNjkxOWVjODE3NTRmMTY5MjIyZGIyZDQ2OTk4NzAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1ob3ZlciI+PHRyPjx0aD5kaXJlY3Rpb25faWQ8L3RoPjx0ZD48L3RkPjwvdHI+PHRyPjx0aD5yb3V0ZV9pZDwvdGg+PHRkPjI0MDwvdGQ+PC90cj48dHI+PHRoPnNlcnZpY2VfaWQ8L3RoPjx0ZD4xPC90ZD48L3RyPjx0cj48dGg+c2hhcGVfaWQ8L3RoPjx0ZD5zaGFwZV8wMzQ8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2hlYWRzaWduPC90aD48dGQ+IEF0eHVyaTwvdGQ+PC90cj48dHI+PHRoPnRyaXBfaWQ8L3RoPjx0ZD40MDcxMzg8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZTFmOWI1ODQ5MTBmNGIxOGE2Y2NlNzE4NGVkZjg5NDMuc2V0Q29udGVudChodG1sXzBlNjkxOWVjODE3NTRmMTY5MjIyZGIyZDQ2OTk4NzAxKTsKICAgICAgICAKCiAgICAgICAgcG9seV9saW5lXzdlOWYwYzQxMDJjYjRkYzViN2MyYWIxNzA4MzBjM2Q4LmJpbmRQb3B1cChwb3B1cF9lMWY5YjU4NDkxMGY0YjE4YTZjY2U3MTg0ZWRmODk0MykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfNjI5ZjFmMWEwODMyNGNjNmI3NGUwMDAyMWMyMTE2MmMgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1OTRmMmUyNDY3YTRjYWJhOTkwYThhMTdmN2VkYzRkKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9seV9saW5lXzQ1ODFjOTkyNGM5MDQ1YzJhNzFkMTdlZGNkNTA4OWIyID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgIFtbNDMuMjU1Njk2OTI3MzM0NTc2LCAtMi45NzM0NDE0NjM2NDgwOTkyXSwgWzQzLjI1NTE0NTY4ODAyMDI4NSwgLTIuOTcxOTM2MjIyOTE1NTUxN10sIFs0My4yNTY5MDQ5NDY5MDc1NCwgLTIuOTcwNTA5NzQ5NDExMDY4Nl0sIFs0My4yNjE0MDAwNTUxMjExODYsIC0yLjk3MTQzMTI0NDMyMDUyMzddLCBbNDMuMjcyMTkwNTUyODk2OTY2LCAtMi45NzQxMTkxMzQ2Mzk5NTQzXSwgWzQzLjI3MzIwNjU1ODk4NjI4LCAtMi45NzE1NzYxNDkzNDgyMjRdLCBbNDMuMjc1MDE3ODcxMzM1NDQsIC0yLjk3MjcxNjk5OTgwODgzMjddLCBbNDMuMjY0NzI0NjgwNzU5MDgsIC0yLjk2MTE0OTkwMTQ2NjAyMTZdLCBbNDMuMjYyNTQ3MDkxMDkzMDA1LCAtMi45NTYzMjg5NTM0MTgyNTMzXSwgWzQzLjI1OTQ2MDA0MzMwMDE1LCAtMi45NTIyNjkxOTMzODU4NTM0XSwgWzQzLjI1Nzk0NDg1ODYzODA3LCAtMi45NDkwNTU0Njg2NzYyODkzXSwgWzQzLjI1NzU4NzUzNzcwNDEwNCwgLTIuOTQyNTIzODU4Njc4NDM1XSwgWzQzLjI1ODYwMzg1ODAyOTAzLCAtMi45NDEyNTIxNjIxMDMxNDU2XSwgWzQzLjI1OTkxNzYxMjEyNzM1LCAtMi45NDAwNzg1NTQ0ODI0NTQ0XV0sCiAgICAgICAgICAgICAgICB7ImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLCAiY29sb3IiOiAiI2ZjOGQ2MiIsICJkYXNoQXJyYXkiOiBudWxsLCAiZGFzaE9mZnNldCI6IG51bGwsICJmaWxsIjogZmFsc2UsICJmaWxsQ29sb3IiOiAiI2ZjOGQ2MiIsICJmaWxsT3BhY2l0eSI6IDAuMiwgImZpbGxSdWxlIjogImV2ZW5vZGQiLCAibGluZUNhcCI6ICJyb3VuZCIsICJsaW5lSm9pbiI6ICJyb3VuZCIsICJub0NsaXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLjAsICJzbW9vdGhGYWN0b3IiOiAxLjAsICJzdHJva2UiOiB0cnVlLCAid2VpZ2h0IjogM30KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzYyOWYxZjFhMDgzMjRjYzZiNzRlMDAwMjFjMjExNjJjKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84OGJiNzBiODk0M2Y0YmQ3YWIwYTJmZGRlOGZmMmY3NyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNjEzNDFmODhlNTg2NDBkYjkzN2VkZGYwMTcxZGFlMDMgPSAkKGA8ZGl2IGlkPSJodG1sXzYxMzQxZjg4ZTU4NjQwZGI5MzdlZGRmMDE3MWRhZTAzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCB0YWJsZS1ob3ZlciI+PHRyPjx0aD5kaXJlY3Rpb25faWQ8L3RoPjx0ZD48L3RkPjwvdHI+PHRyPjx0aD5yb3V0ZV9pZDwvdGg+PHRkPjI0MTwvdGQ+PC90cj48dHI+PHRoPnNlcnZpY2VfaWQ8L3RoPjx0ZD4xPC90ZD48L3RyPjx0cj48dGg+c2hhcGVfaWQ8L3RoPjx0ZD5zaGFwZV8xMjM8L3RkPjwvdHI+PHRyPjx0aD50cmlwX2hlYWRzaWduPC90aD48dGQ+IEluZGF1dHh1PC90ZD48L3RyPjx0cj48dGg+dHJpcF9pZDwvdGg+PHRkPjQxNjA4ODwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84OGJiNzBiODk0M2Y0YmQ3YWIwYTJmZGRlOGZmMmY3Ny5zZXRDb250ZW50KGh0bWxfNjEzNDFmODhlNTg2NDBkYjkzN2VkZGYwMTcxZGFlMDMpOwogICAgICAgIAoKICAgICAgICBwb2x5X2xpbmVfNDU4MWM5OTI0YzkwNDVjMmE3MWQxN2VkY2Q1MDg5YjIuYmluZFBvcHVwKHBvcHVwXzg4YmI3MGI4OTQzZjRiZDdhYjBhMmZkZGU4ZmYyZjc3KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbGF5ZXJfY29udHJvbF82OWZkZjMyMDk2YTA0MWFmODc3Njk2NTZhOTcxOWQxNSA9IHsKICAgICAgICAgICAgICAgIGJhc2VfbGF5ZXJzIDogewogICAgICAgICAgICAgICAgICAgICJjYXJ0b2RicG9zaXRyb24iIDogdGlsZV9sYXllcl85ZDc4MjA1OGY2ZDk0OTM1YTVmZjU2Y2JiYjAxNTVmYSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBvdmVybGF5cyA6ICB7CiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE0NjY4IiA6IGZlYXR1cmVfZ3JvdXBfMjRkMDM5MDFhZGY3NGRkOTljMWQ0NzdhZWQ3MDQ4ZWYsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE0NzgwIiA6IGZlYXR1cmVfZ3JvdXBfYmZmYzEyMTRlY2ZhNGIxODgwMzE0ODRhNDIzZTQ3YzEsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA5MDE4IiA6IGZlYXR1cmVfZ3JvdXBfZDk1N2UzMTdmOTMzNDg4MDgwOTc3NDZiN2MyZTQwYWQsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA5Mjg1IiA6IGZlYXR1cmVfZ3JvdXBfNjEzOWU4OTM3MDk2NGE2YThkMDY0YjIzY2ViNzNhMGIsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDEzMjQyIiA6IGZlYXR1cmVfZ3JvdXBfZTBhZGU1YWMyMWFjNDkxNTk0MWYwNWRiYmNjNDI1MTYsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDEzMzg4IiA6IGZlYXR1cmVfZ3JvdXBfMzU1ZGMxZTVhYmFlNDlhY2JiNDZlMjFhNjNmODg2NjYsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDI0OTg2IiA6IGZlYXR1cmVfZ3JvdXBfMzkwN2E3ZjIyYzBhNDhlMThhZWI3ZTM2MjhmODhkZTIsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDI1MDUxIiA6IGZlYXR1cmVfZ3JvdXBfMDg5MjQ3YWQyM2Y4NDI1MjhlMWQ3NTI4NmQ0MDkxMGIsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA4MzI4IiA6IGZlYXR1cmVfZ3JvdXBfNzk3ZTdiNmNhYTkwNGJlM2IyN2I1NDM0NWM4OTEwNGIsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA4NTEwIiA6IGZlYXR1cmVfZ3JvdXBfNzg3NmRmMzJiOGRlNGMwNGI3NDJlMTMxZWEzMzljZWIsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE0MzM0IiA6IGZlYXR1cmVfZ3JvdXBfMjYyYjQyOWU2ZTMwNGFkMGE0M2U4MGE5NWRhMjk4MzYsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE0NDc4IiA6IGZlYXR1cmVfZ3JvdXBfYmRlYjY1Y2ZhOTZjNGY5Yzk3M2MwMzEwNTc1YWU1MDcsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA2MzA1IiA6IGZlYXR1cmVfZ3JvdXBfMmM0NjRkYTVhMTAxNDIwNDk4OTAyMGE2MGU2YjdjMWIsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA2NDcxIiA6IGZlYXR1cmVfZ3JvdXBfOGEwZGZjYTc5ZTkxNDVjZmEwOTQ1OTAwMzdmOWM0M2UsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE1Mjk5IiA6IGZlYXR1cmVfZ3JvdXBfZDBjOTVlYWRmZWU0NGZkZjlkZjEzOTA5NDZmMDQ0NTksCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE1NDYxIiA6IGZlYXR1cmVfZ3JvdXBfN2I0YmJjZThmYmE5NDE3Mzk3Yjk3ZTkwOTcxMWRhZTEsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE2NTQzIiA6IGZlYXR1cmVfZ3JvdXBfNTMxOTM3OWY3ODEyNDA1ZThkY2JlMjkzMzUwMjNhMmMsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE2NzI2IiA6IGZlYXR1cmVfZ3JvdXBfODM5YjI4OWRjZTI5NDk3YjliMmE2YjIyNTNmMzkyZjEsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA5NjU4IiA6IGZlYXR1cmVfZ3JvdXBfMjFmZjgzYTEzZmRhNGM3MDllNmViOTkwMDEzNTA2OTMsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDMyNDIxIiA6IGZlYXR1cmVfZ3JvdXBfMTlmYzVkZGE5ODA0NDllOWI0OWRhYmQ5ZGQwMzg4OWQsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDExNjU0IiA6IGZlYXR1cmVfZ3JvdXBfZjJmYjRkNjk0NzZkNDM2ZDliOTllY2E0MjZmYTQ5MmMsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDExNzgwIiA6IGZlYXR1cmVfZ3JvdXBfYTBmZWZiNGM2MzY5NDMzODhkNTA1NTAzZWI1ZTkxMmUsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE1NzM5IiA6IGZlYXR1cmVfZ3JvdXBfYjY2Yjc3MjBlZTc1NGRlYzkyYjk1MGY1YWYwNjEyZTksCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE1ODc1IiA6IGZlYXR1cmVfZ3JvdXBfNGZmOTAzZmY1ODY4NDA4Y2ExM2VkNmUzYzVjNGM4OGIsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE2Mjg5IiA6IGZlYXR1cmVfZ3JvdXBfMWM5NzAyM2FkZjEyNGI0YzliZmIzMjdkZDRkMDk3ZGIsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE2NDE2IiA6IGZlYXR1cmVfZ3JvdXBfMWNjMTg4OGQ2YTA3NGU5Y2JhMjlhMDhmZjRlOThhM2QsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE0MDY3IiA6IGZlYXR1cmVfZ3JvdXBfODU3MWY0OTVkMjE1NGQyYjg1MTY2M2UwNDBkOTkxMjYsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE0MTc4IiA6IGZlYXR1cmVfZ3JvdXBfMTYyMWU3M2YwM2JlNGNiYjg4MTQ2NTVhNzFkMmJlM2MsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA3ODQyIiA6IGZlYXR1cmVfZ3JvdXBfNjNkN2VlYmNjY2Q5NDhiNDk2ZTI4NjgyMjcwNGRlMzMsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA3OTYzIiA6IGZlYXR1cmVfZ3JvdXBfZDg5ZDM4NGQ2NTQ3NDg2MjhjMjY0NTlhYjZlYTg0NDEsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDEwNjQzIiA6IGZlYXR1cmVfZ3JvdXBfN2EyYTc3MDBjNDBmNDY4MGFkOTJkZTM0NDdlZmQwNjQsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDEwODY5IiA6IGZlYXR1cmVfZ3JvdXBfYTU5Zjg4MzNhMTlkNDE4MDlkY2IwOTgzMTQ2NmU2NTAsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA3NDY5IiA6IGZlYXR1cmVfZ3JvdXBfNmYwNTMxYTg3YWZkNDNmNjk0YTQ2Y2E1NDNhMjQ1YzAsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA3NTI5IiA6IGZlYXR1cmVfZ3JvdXBfYWNmYzJjOGNhNDA1NDg5ZTgzNGFmNWY1YTgxMjU2YWEsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDEyNzk2IiA6IGZlYXR1cmVfZ3JvdXBfMjA1YmJkMWM0NGE1NGI4OGE2MWUyMTE1N2E3MzljODcsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE0OTM5IiA6IGZlYXR1cmVfZ3JvdXBfMTExMjk5Y2Q3ZjZhNGNhYWEwZmM4NjBiODIyZGY1ZGQsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE1MDgwIiA6IGZlYXR1cmVfZ3JvdXBfMjUwMDVmNGU2NTM0NDFhZWE4ZjljOWMzZTgwODhjZTcsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDI0NTUxIiA6IGZlYXR1cmVfZ3JvdXBfYzhjY2I1NThlN2I4NDk4NWJmOTJmYjQ4YzllYzA4ODgsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDI0NjM0IiA6IGZlYXR1cmVfZ3JvdXBfZmFiYmM1YmY1MjI3NDExZmEwMmYwOGYyYzIxNDQwNWYsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDEwMjY2IiA6IGZlYXR1cmVfZ3JvdXBfNjRjMjU5ZTZhMWE5NDZmOWI3ZmYxZmQ2NDljN2ExMGEsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDEwNDExIiA6IGZlYXR1cmVfZ3JvdXBfYzM2MjU1ZGI5YjdiNDlhNmIxZjc2OWFmNDk1ZWZlYjksCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA2NjI4IiA6IGZlYXR1cmVfZ3JvdXBfODhhMDMwYTQxMzAxNDUxZDk0ZjllMDRkOTliZGU5ZmQsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA2ODE1IiA6IGZlYXR1cmVfZ3JvdXBfMzgzZDZhNzliY2MzNDRjZWE4NDM2NGU4NjM4OWM3NzcsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA5OTc2IiA6IGZlYXR1cmVfZ3JvdXBfNGNmMDc5ZmU2MTBlNDI1YmFiZWZiZmQzYTE5ZDBhOWYsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDEwMTAwIiA6IGZlYXR1cmVfZ3JvdXBfYmU1MDJlNTNlZjdjNDJmZmFiOTI1YWNkNjZiZjEyMDksCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDExMjI2IiA6IGZlYXR1cmVfZ3JvdXBfMGZhNDE1YzRjYTY0NDY4ZTk2ZWM0OTk5ODJhNjdmYjEsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDExNTA4IiA6IGZlYXR1cmVfZ3JvdXBfMTU0NzQ3N2FmYWRjNGEyNzhiOTZmYWUyMWNjMDBiMmMsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA3MDI2IiA6IGZlYXR1cmVfZ3JvdXBfMGQzMWQ5ZWZmMDIxNGE4OGJmMGU2ZmQ1N2Y1ZjY3ZTcsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDA3MTM4IiA6IGZlYXR1cmVfZ3JvdXBfZjQ2M2VlYTAwN2E2NGVkM2E5YjUzZTRmMTc0YzAwY2QsCiAgICAgICAgICAgICAgICAgICAgIlRyaXAgNDE2MDg4IiA6IGZlYXR1cmVfZ3JvdXBfNjI5ZjFmMWEwODMyNGNjNmI3NGUwMDAyMWMyMTE2MmMsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9OwogICAgICAgICAgICBMLmNvbnRyb2wubGF5ZXJzKAogICAgICAgICAgICAgICAgbGF5ZXJfY29udHJvbF82OWZkZjMyMDk2YTA0MWFmODc3Njk2NTZhOTcxOWQxNS5iYXNlX2xheWVycywKICAgICAgICAgICAgICAgIGxheWVyX2NvbnRyb2xfNjlmZGYzMjA5NmEwNDFhZjg3NzY5NjU2YTk3MTlkMTUub3ZlcmxheXMsCiAgICAgICAgICAgICAgICB7ImF1dG9aSW5kZXgiOiB0cnVlLCAiY29sbGFwc2VkIjogdHJ1ZSwgInBvc2l0aW9uIjogInRvcHJpZ2h0In0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjU5NGYyZTI0NjdhNGNhYmE5OTBhOGExN2Y3ZWRjNGQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIG1hcF9mNTk0ZjJlMjQ2N2E0Y2FiYTk5MGE4YTE3ZjdlZGM0ZC5maXRCb3VuZHMoCiAgICAgICAgICAgICAgICBbWzQzLjIyNjM3MDk4ODI1NDUxLCAtMi45NzQ5NDk2OTQyNTQ3MjUzXSwgWzQzLjI4NDA1NjE2NjQxNzU3LCAtMi44OTY1MDYxMTY2OTM3NDRdXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICk7CiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x1511000a748>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feed.map_trips(\n",
    "    feed.trips.groupby('route_id').first().trip_id.head(50)  # Map the first trip of each route\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Build patterns\n",
    "In a non-frequency based GTFS, a route has many trips, each corresponding to a start at a specific time. It is necessary to group these trips in order to compute their headway. A group of trips is refered as a pattern.\n",
    "The default method to build the patterns is by grouping trips based on their ordered list of stop_ids, without knowledge of time or duration.  \n",
    "Other methods to build the patterns are available: by parent stations, or clusters. See example 4-advanced-patterns.ipynb"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "feed.build_patterns()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>indicator</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>agencies</td>\n",
       "      <td>[Bilbobus]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>running_services</td>\n",
       "      <td>[1]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>timezone</td>\n",
       "      <td>Europe/Madrid</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>start_date</td>\n",
       "      <td>20191210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>end_date</td>\n",
       "      <td>20191210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>num_routes</td>\n",
       "      <td>82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>num_trips</td>\n",
       "      <td>3297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>num_stops</td>\n",
       "      <td>498</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>num_shapes</td>\n",
       "      <td>124</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>num_frequencies</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          indicator          value\n",
       "0          agencies     [Bilbobus]\n",
       "1  running_services            [1]\n",
       "2          timezone  Europe/Madrid\n",
       "3        start_date       20191210\n",
       "4          end_date       20191210\n",
       "5        num_routes             82\n",
       "6         num_trips           3297\n",
       "7         num_stops            498\n",
       "8        num_shapes            124\n",
       "9   num_frequencies              0"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feed.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Convert to frequencies"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████████| 76/76 [00:05<00:00, 13.09it/s]\n"
     ]
    }
   ],
   "source": [
    "time_range = ['06:00:00', '09:00:00']  # time format must be HH:MM:SS\n",
    "feed_f = feed.convert_to_frequencies(time_range=time_range)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>indicator</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>agencies</td>\n",
       "      <td>[Bilbobus]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>running_services</td>\n",
       "      <td>[1]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>timezone</td>\n",
       "      <td>Europe/Madrid</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>start_date</td>\n",
       "      <td>20191210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>end_date</td>\n",
       "      <td>20191210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>num_routes</td>\n",
       "      <td>67</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>num_trips</td>\n",
       "      <td>76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>num_stops</td>\n",
       "      <td>495</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>num_shapes</td>\n",
       "      <td>76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>num_frequencies</td>\n",
       "      <td>76</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          indicator          value\n",
       "0          agencies     [Bilbobus]\n",
       "1  running_services            [1]\n",
       "2          timezone  Europe/Madrid\n",
       "3        start_date       20191210\n",
       "4          end_date       20191210\n",
       "5        num_routes             67\n",
       "6         num_trips             76\n",
       "7         num_stops            495\n",
       "8        num_shapes             76\n",
       "9   num_frequencies             76"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feed_f.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The average headway computed is the interval length divided by the number of trip starts within the interval.\n",
    "- a trip starting exactly at the start of the time range (6:00:00) is taken into account\n",
    "- a trip starting exactly at the end of the time range (9:00:00) is not considered."
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
